Cod sursa(job #1250971)

Utilizator lupuflaviu9lupuflaviu lupuflaviu9 Data 28 octombrie 2014 20:16:06
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
using namespace std;
const int NMAX = 15000;
int aib[NMAX+1];
int n;
int lsb(int x)
{
    return x&(-x);
}
void update(int val, int poz) {
    for(int i = poz; i <= n; i += lsb(i))
        aib[i] -= val;
 
}
int query(int poz) {
    int ans = 0;
    while(poz) {
        ans += aib[poz];
        poz -= lsb(poz);
    }
    return ans;
}
int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int m, i, val, op, a, b;
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++) {
        scanf("%d", &val);
        update(-val, i);
    }
 
    for(i = 1; i <= m; i++) {
        scanf("%d%d%d", &op, &a, &b);
        if(op == 0)
            update(b, a);
        if(op == 1)
            printf("%d\n", query(b) - query(a-1));
 
    }
    return 0;
}