Cod sursa(job #954857)

Utilizator Vlad.PPetcu Vlad Vlad.P Data 30 mai 2013 11:42:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v;
int n,m;
int lsb(int x){
    return ((x^(x-1))+1)>>1;
}
void update(int p,int x){
    for(int i=p;i<=n;i+=lsb(i)){
        v[i]+=x;
    }
}
int query(int p){
    int ans=0;
    while(p){
        ans+=v[p];
        p-=lsb(p);
    }
    return ans;
}
int main(){
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    v.push_back(0);
    for(int i=0;i<n;i++){
        v.push_back(0);
    }
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        update(i,x);
    }
    for(int i=1;i<=m;i++){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(a==0){
            update(b,-c);
        }
        if(a==1){
            printf("%d\n",query(c)-query(b-1));
        }
    }
    return 0;
}