Pagini recente » Cod sursa (job #525862) | Cod sursa (job #3216003) | Cod sursa (job #1810787) | Cod sursa (job #1647317) | Cod sursa (job #45701)
Cod sursa(job #45701)
#include <stdio.h>
#include <math.h>
#define NRM 15000
FILE *fin,*fout;
int a[NRM];
int main()
{long n,m,i,l,val,ind,poz,x,dr,st,s1,s2;
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=0;
poz=0;
x=1;
while (dr>0)
{
s1+=a[dr];
x=2*x;
while ((dr&x)==0)
{
poz++;
x=2*x;
}
dr-=x;
poz++;
}
st--;
s2=0;
poz=0;
x=1;
while (st>0)
{
s2+=a[st];
x=2*x;
while((st&x)==0)
{
poz++;
x=2*x;
}
st-=x;
poz++;
}
fprintf(fout,"%ld\n",s1-s2);
}
else
{
fscanf(fin,"%ld %ld",&ind,&val);
val*=-1;
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++;
}
}
}
fprintf(fout,"\n");
return 0;
}