Pagini recente » Cod sursa (job #2231012) | Cod sursa (job #3131864) | Cod sursa (job #1966247) | Cod sursa (job #834021) | Cod sursa (job #1155144)
#include <iostream>
#include <fstream>
using namespace std;
#define maxn 15010
int lsb(int nr)
{
return ((nr)&(-nr));
}
int aib[maxn];
int n;
void update(int pos,int val)
{
for (int i=pos;i<=n;i+=lsb(i))
aib[i]+=val;
}
int v[maxn];
int query(int a,int b)
{
int val=0;
while (a<=b)
{
if (b-lsb(b)<a-1)
{
val+=v[b];
b--;
}
else
{
val+=aib[b];
b-=lsb(b);
}
}
return val;
}
int m,i,q,t,val,p;
int main(void)
{
FILE * f;
f=fopen("datorii.in","r");
ofstream g("datorii.out");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&v[i]);
update(i,v[i]);
}
for (i=1;i<=m;i++)
{
fscanf(f,"%d",&q);
if (q==0)
{
fscanf(f,"%d%d",&t,&val);
update(t,-val);
}
if (q==1)
{
fscanf(f,"%d%d",&p,&q);
g<<query(p,q)<<'\n';
}
}
g.close();
return 0;
}