Pagini recente » Cod sursa (job #758356) | Cod sursa (job #3292779) | Cod sursa (job #87774) | Cod sursa (job #1863555) | Cod sursa (job #1130409)
#include<cstdio>
using namespace std;
const int LIMN = 15010;
int v[LIMN], sum[LIMN], n, m;
int detK(int x){
int k=0, c=1;
while((c&x) == 0){
k++; c=c<<1;
}
return k;
}
int bruteSum(int a, int b){
int s=0;
for(int i=a; i<=b; i++){
s+=v[i];
}
return s;
}
void createAIB(){
for(int i=1; i<=n; i++){
sum[i]=bruteSum(i-(1<<detK(i))+1, i);
}
}
void add(int pos, int x){
int i=pos;
while(i<=n){
sum[i]-=x;
i+=1<<detK(i);
}
}
int getSumStart(int a){
int i=a, s=0;
while(i>0){
s+=sum[i];
i-=1<<detK(i);
}
return s;
}
int query(int a, int b){
return getSumStart(b) - getSumStart(a-1);
}
FILE *in=fopen("datorii.in","r"), *out=fopen("datorii.out","w");
int main (){
fscanf(in, "%d%d", &n, &m);
for(int i=1; i<=n; i++){
fscanf(in, "%d", &v[i]);
}
createAIB();
int oper, a, b;
for(int i=1; i<=m; i++){
fscanf(in, "%d%d%d", &oper, &a, &b);
if(oper==0){
add(a, b);
}else{
fprintf(out, "%d\n", query(a, b));
}
}
return 0;
}