Pagini recente » Cod sursa (job #988480) | Cod sursa (job #2533902) | Cod sursa (job #2089377) | Cod sursa (job #1923310) | Cod sursa (job #113131)
Cod sursa(job #113131)
#include <stdio.h>
using namespace std;
FILE *fin=fopen("datorii.in","r"),*fout=fopen("datorii.out","w");
int a,b,c,i,n,m,A[16000]={0},B[16000]={0};
void adauga(int x,int cat)
{ while(x<=n)
{ A[x]+=cat; x+=x^(x&(x-1));}
}
int extrage(int x)
{ int rezultat=0;
while(x>0)
{ rezultat+=A[x],x-=x^(x&(x-1));}
return rezultat;
}
int main()
{ fscanf(fin,"%d %d\n",&n,&m);
for(i=1;i<=n;fscanf(fin,"%d",&a),B[i]=a+B[i-1],i++);
for(i=1;i<=m;i++)
{ fscanf(fin,"%d %d %d",&a,&b,&c);
if(!a) adauga(b,c);else
fprintf(fout,"%d\n",B[c]-B[b-1]-(extrage(c)-extrage(b-1)));
}
fclose(fin);fclose(fout);
return 0;
}