Cod sursa(job #1385362)

Utilizator razboi4Manole Iulian razboi4 Data 11 martie 2015 21:49:35
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<bits/stdc++.h>
using namespace std;
int N, M, Arb[131072];
void Uptade(int poz, int val)
{
    while(poz <= N) {
        Arb[poz] += val;
        int C = 0;
        while(!(poz & (1 << C)))
            ++ C;
        poz += (1 << C);
    }
}
int Query(int st, int dr)
{
    int Sum = 0;
    while(dr >= st){
        Sum += Arb[dr];
        int C = 0;
        while(!(dr & (1 << C)))
            ++ C;
        dr -= (1 << C);
    }
    return Sum;
}
int main()
{
    int val,T,tip;
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d%d", &N, &M);
    for(int i = 1; i <= N; Uptade(i, val), ++ i )
        scanf("%d", &val);
    for( ; M ; --M ) {
        scanf("%d%d%d", &tip, &T, &val);
        if(!tip)
            Uptade(T, -val);
        else
            printf("%d\n", Query(T, val) - Query(1, T - 1));
    }
    return 0;
}