Pagini recente » Cod sursa (job #1833361) | Cod sursa (job #1407191) | Cod sursa (job #1974998) | Cod sursa (job #1905338) | Cod sursa (job #548954)
Cod sursa(job #548954)
#include <cstdio>
#include <cstdlib>
FILE *fin=fopen("datorii.in","r");
FILE *fout=fopen("datorii.out","w");
int aib[0x8000]={};
#define zeros(x) (((x)^((x)-1))&(x))
void add(int pos, int val,int n)
{
for (int i = pos; i<=n; i+=zeros(i))
aib[i]+=val;
}
int length(int pos)
{
int res = 0;
for (int i = pos; i>0; i-=zeros(i))
res+=aib[i];
return res;
}
int query(int aa, int bb)
{
return length(bb)-length(aa-1);
}
int main (int argc, char * const argv[]) {
int n,m;
fscanf(fin, "%d%d",&n,&m);
for (int i=1; i<=n; i++)
{
int x;
fscanf(fin, "%d",&x);
add(i, x, n);
}
for (int i=0; i<m; i++)
{
int c,a,b;
fscanf(fin, "%d%d%d",&c,&a,&b);
if (c==0)
{
add(a, -b, n);
} else {
fprintf(fout, "%d\n",query(a, b));
}
}
fclose(fin);
fclose(fout);
return 0;
}