AcWing problemas simples enteros 242. A (árbol Fenwick + diferencial)

enlaces a los temas: Haga clic aquí
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
para inicializar un árbol Fenwick matrices unidimensionales diferenciales, cada intervalo de tiempo cambia de "impacto" en l l generado en, en r + 1 r + 1 Chu eliminar, el valor está buscando una investigación para comprobar el prefijo del grupo de puntuación y.

Hábilmente "add section" La práctica + "único punto de consulta" para Fenwick árbol bueno "único punto de aumento" + "consulta gama" para su procesamiento.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;
typedef long long ll;
const int N = 100010;

int n, m;
int a[N];
ll tr[N];

int lowbit(int x)
{
    return x & -x;
}

void add(int x, int c)
{
    for(int i = x; i <= n; i += lowbit(i))  tr[i] += c;
}

ll sum(int x)
{
    ll res = 0;
    for(int i = x; i; i -= lowbit(i))   res += tr[i];
    return res;
}

int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    
    for(int i = 1; i <= n; ++i) add(i, a[i] - a[i - 1]);
    
    while(m--)
    {
        char op[2];
        scanf("%s", op);
        
        if(op[0] == 'Q')
        {
            int x;
            scanf("%d", &x);
            printf("%lld\n", sum(x));
        }
        else
        {
            int l, r, d;
            scanf("%d%d%d", &l, &r, &d);
            add(l, d);
            add(r + 1, -d);
        }
    }
    
    return 0;
}
Publicados 844 artículos originales · ganado elogios 135 · Vistas de 150.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42815188/article/details/105170244
Recomendado
Clasificación