Pagini recente » Cod sursa (job #562403) | Cod sursa (job #1408324) | Cod sursa (job #331747) | Cod sursa (job #2163255) | Cod sursa (job #114176)
Cod sursa(job #114176)
#include <math.h>
#include <string.h>
#include <fstream.h>
int main ()
{ifstream f("datorii.in");
ofstream ff("datorii.out");
long a[15001],n,m,i,j,k,l,x,y,z,s1,s2,q;
memset(a,0,sizeof(a));
f>>n>>m;
for (i=1;i<=n;i++)
{f>>a[i];}
for (i=1;i<=n;i++)
{l=i;k=0;
while(l%2==0){k++;l/=2;}
for (l=i-1,j=1;j<=k;j++)
{a[i]+=a[l];
x=l;y=0;
while(x%2==0){y++;x/=2;}
l-=pow(2,y);
}
}
for (i=1;i<=m;i++)
{f>>j>>k>>l;
if(j==1)
{y=k-1;z=1;
while(y%2==0&&y>0){z*=2;y/=2;}
q=z+1;
s1=0;
x=k-1;
while(x>0&&q>0)
{q--;
s1+=a[x];
y=x;z=1;
while(y%2==0&&y>0){z*=2;y/=2;}
x-=z;
}
y=l;z=1;
while(y%2==0&&y>0){z*=2;y/=2;}
q=z+1;
s2=0;
x=l;
while(x>0&&q>0)
{q--;
s2+=a[x];
y=x;z=1;
while(y%2==0&&y>0){z*=2;y/=2;}
x-=z;
}
ff<<s2-s1<<'\n';
}
else
{y=k; a[y]-=l;
while(y<=n)
{x=y;z=1;
while(x%2==0){z*=2;x/=2;}
y+=z;
if(y<=n)
a[y]-=l;
}
}
}
return 0;
}