Cod sursa(job #1684865)

Utilizator AdrianGotcaAdrian Gotca AdrianGotca Data 11 aprilie 2016 12:34:53
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;

int last2(int);
void upd(int,int);
int query(int);
int n,m,aib[15005];
int main(){
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        upd(i,x);
    }
    for (int i=1;i<=m;i++){
        int op,a,b;
        scanf("%d%d%d",&op,&a,&b);
        if (!op){
            upd(a,-b);
        }
        else {
            int s1=query(a-1);
            int s2=query(b);
            printf("%d\n",s2-s1);
        }
    }
}


void upd(int pos,int val){
    for (int i=pos;i<=n;i+=last2(i)){
        aib[i]+=val;
    }
}

int query(int x){
    int ans=0;
    for (int i=x;i>0;i-=last2(i)){
        ans+=aib[i];
    }
    return ans;
}

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