Pagini recente » Cod sursa (job #1802723) | Cod sursa (job #497373) | Cod sursa (job #2381499) | Cod sursa (job #69380) | Cod sursa (job #789120)
Cod sursa(job #789120)
using namespace std;
#include<cstdio>
#include<vector>
#define nmax 15001
#define value y
#define day x
inline int t_zeros(int x)
{
int i;
for(i=0;!(((x^(x-1))&x)&(1<<i-1));i++);
return i;
}
FILE *g=fopen("datorii.out","w");
vector<long int> v(nmax);
vector<long int> c(nmax,0);
int main ()
{
unsigned int n,m,op,x,y,i,zero;
long sx,sy;
FILE *f=fopen("datorii.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%ld",&v[i]);
for(i=1;i<=n;i++)
{
zero=t_zeros(i);
if(zero) op=i-(1<<(zero-1))+1;
else op=i;
for(;op<=i;++op)
c[i]+=v[op];
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&op,&x,&y);
if(op&1)
{
sx=sy=0;
--x;
while(x)
{
sx+=c[x];
zero=t_zeros(x);
if(zero) x-=1<<(zero-1);
else --x;
}
while(y)
{
sy+=c[y];
zero=t_zeros(y);
if(zero) y-=1<<(zero-1);
else --y;
}
fprintf(g,"%ld\n",sy-sx);
}
else
while(x<=n)
c[x]-=y,(t_zeros(x)) ?x+=1<<(t_zeros(x)-1):x++;
}
fclose(f);
fclose(g);
return 0;
}