Cod sursa(job #973666)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 14 iulie 2013 23:40:06
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>

#define NMAX 15007

int Ans, n, m;
int Arbi[NMAX * 3];

void update(int nod, int st, int dr, int VAL, int poz){
    if(st == dr){
        Arbi[nod] += VAL;
        return ;
    }
    int med = (st + dr) >> 1;
    if(med >= poz)
        update(2 * nod, st, med, VAL, poz);
    else
        update(2 * nod + 1, med + 1, dr, VAL, poz);
    Arbi[nod] = Arbi[nod * 2] + Arbi[nod * 2 + 1];
}

void query(int nod, int st, int dr, int x, int y)
{
    if(st >= x && dr <= y){
        Ans += Arbi[nod];
        return ;
    }
    int med = (st + dr) >> 1;
    if(med >= x)
        query(2 * nod, st, med, x, y);
    if(med < y)
        query(2 * nod + 1, med + 1, dr, x, y);
}

int main(){
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d %d", &n, &m);
    int Number = 0;
    for(int i = 1; i <= n; ++ i)
        scanf("%d", &Number) , update(1, 1, n, Number, i);
    for(int i = 1; i <= m; ++ i){
        int a, b, Tip;
        scanf("%d %d %d", &Tip, &a, &b);
        if(Tip == 0)
            update(1, 1, n, - b, a);
        else{
            Ans = 0;
            query(1, 1, n, a, b);
            printf("%d\n", Ans);
        }
    }
}