Pagini recente » Cod sursa (job #2362138) | Cod sursa (job #838130) | Cod sursa (job #555239) | Cod sursa (job #1309119) | Cod sursa (job #855425)
Cod sursa(job #855425)
#include <stdio.h>
using namespace std;
FILE *fi=fopen("datorii.in","r"),*fo=fopen("datorii.out","w");
long n,m,i,j,a[100000],op,x,y;
void scade(long poz,long val){
long z=0;
a[poz]-=val;
while (poz<=n){
while (!(poz & 1<<z)) z++;
poz+=1<<z;
a[poz]-=val;
}
}
long get(long x){
long aux=a[x],z=0;
while (x){
while (!(x & 1<<z)) z++;
x-=1<<z;
aux+=a[x];
}
return aux;
}
long suma(long st,long dr){
return (get(dr)-get(st-1));
}
int main(){
fscanf(fi,"%ld%ld",&n,&m);
for (i=1; i<=n; i++){
fscanf(fi,"%ld",&x);
scade(i,x*-1);
}
for (i=1; i<=m; i++){
fscanf(fi,"%ld%ld%ld",&op,&x,&y);
if (op) fprintf(fo,"%ld\n",suma(x,y)); else scade(x,y);
}
fclose(fi); fclose(fo); return 0;
}