Pagini recente » Cod sursa (job #2188838) | Cod sursa (job #1585381) | Cod sursa (job #1968507) | Cod sursa (job #387306) | Cod sursa (job #1155187)
#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 query1(int pos)
{
int val=0;
for (int i=pos;i>0;i-=lsb(i))
val+=aib[i];
return val;
}
int query2(int l,int r)
{
int val=0;
while (l<=r)
{
if (r-lsb(r)<l)
{
val+=v[r];
r--;
}
else
{
val+=aib[r];
r-=lsb(r);
}
}
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);
val=query2(p,q);
g<<val<<'\n';
}
}
g.close();
return 0;
}