Pagini recente » Cod sursa (job #2273237) | Cod sursa (job #1535002) | Cod sursa (job #2844935) | Cod sursa (job #1884006) | Cod sursa (job #45724)
Cod sursa(job #45724)
#include <stdio.h>
#include <math.h>
#define NRM 15000
FILE *fin,*fout;
long n,m,i,l,val,ind,poz,x,dr,st,s1,s2;
int a[NRM];
int query(int x)
{
int r = 0;
for (; x; x -= x ^ (x-1) & x)
r += a[x];
return r;
}
void update(int x, int v)
{
for (; x <= n; x += x^(x-1) & x)
a[x] += v;
}
int main()
{
fin=fopen("datorii.in","rt");
fout=fopen("datorii.out","wt");
fscanf(fin,"%ld %ld",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(fin,"%ld",&val);
ind=i;
poz=0;
x=1;
while (ind<=n)
{
a[ind]=a[ind]+val;
x*=2;
while ((ind&x)==0)
{
poz++;
x*=2;
}
ind=ind+x;
poz++;
}
}
for (i=1;i<=m;i++)
{
fscanf (fin,"%ld",&l);
if (l==1)
{
fscanf(fin,"%ld %ld",&st,&dr);
s1=query(dr);
s2=query(st-1);
fprintf(fout,"%ld\n",s1-s2);
}
else
{
fscanf(fin,"%ld %ld",&ind,&val);
update(ind,val);
}
}
fprintf(fout,"\n");
return 0;
}