Cod sursa(job #1702278)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 14 mai 2016 21:36:39
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 15005;

int n;
int aib[NMAX];

inline int lsb(int arg) {
    return arg&(-arg);
}

inline void update(int poz, int val) {
    while(poz<=n) {
        aib[poz]+=val;
        poz+=lsb(poz);
    }
}

inline int query(int poz) {
    int ans=0;
    while(poz) {
        ans+=aib[poz];
        poz-=lsb(poz);
    }
    return ans;
}

inline int query(int a, int b) {
    return query(b)-query(a-1);
}

int main(void) {
    FILE *fi = fopen("datorii.in", "r");
    FILE *fo = fopen("datorii.out", "w");
    int m, tsk, a, b, t;

    fscanf(fi,"%d%d",&n,&m);
    for(int i=1; i<=n; ++i) {
        fscanf(fi,"%d",&t);
        update(i, t);
    }
    while(m--) {
        fscanf(fi,"%d%d%d",&tsk,&a,&b);
        switch(tsk) {
        case 0:
            update(a, -b);
            break;
        case 1:
            fprintf(fo,"%d\n",query(a, b));
            break;
        }
    }

    fclose(fi);
    fclose(fo);
    return 0;
}