Pagini recente » Cod sursa (job #3195329) | Cod sursa (job #1685671) | Cod sursa (job #1863056) | Cod sursa (job #3292689) | Cod sursa (job #1269014)
#include <iostream>
#include <cstdio>
#include <vector>
std::vector<int> v;
std::vector<int> aib;
void update(int pos, int delta)
{
for(int i = pos; i<aib.size(); i+=i&(~i+1))
{
aib[i]+=delta;
}
}
int query(int left, int right)
{
int s=0;
for(int i=right; i; i=i&(i-1))
{
s+=aib[i];
}
for(int i=left-1; i;i=i&(i-1))
{
s-=aib[i];
}
return s;
}
int main ()
{
FILE *fin=fopen("datorii.in","r");
FILE *fout = fopen("datorii.out","w");
int n,m,x;
fscanf(fin,"%d%d",&n,&m);
int size;
for(size=1;size<n;size*=2){}
aib.resize(size+1);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&x);
update(i, x);
}
int opt, left, right, pos, val;
for(int i=1; i<=m; i++)
{
fscanf(fin, "%d", &opt);
if(opt)
{
fscanf(fin, "%d%d", &left, &right);
fprintf(fout,"%d\n", query(left, right));
}
else
{
fscanf(fin, "%d%d", &pos, &val);
update(pos,-val);
}
}
return 0;
}