Pagini recente » Cod sursa (job #3281543) | Cod sursa (job #2903090) | Cod sursa (job #2952579) | Cod sursa (job #1755981) | Cod sursa (job #114484)
Cod sursa(job #114484)
#include <stdio.h>
#include <string.h>
#define N 15001
int main ()
{FILE *f,*ff;
f=fopen("datorii.in","r");
ff=fopen("datorii.out","w");
unsigned long n,m,i,j,x,p,q,s1,s2;
unsigned long *a,b[N];
fscanf(f,"%ld %ld",&n,&m);
a=new unsigned long[n+1];
memset(a,0,(n+1)*sizeof(long));
memset(b,0,N*sizeof(long));
for (i=1;i<=n;i++)
{fscanf(f,"%ld",&x);
a[i]=a[i-1]+x;
}
for (i=1;i<=n;i++)
{b[i]=a[i]-a[i&(i-1)];
}
for (i=1;i<=m;i++)
{fscanf(f,"%ld %ld %ld",&x,&p,&q);
if(x==1)
{p--;
for (s1=0,j=p-((p-1)&p);j>=1;j/=2,p=p&(p-1))
{s1+=b[p];}
for (s2=0,j=q-((q-1)&q);j>=1;j/=2,q=q&(q-1))
{s2+=b[q];}
fprintf(ff,"%ld\n",s2-s1);
}
else
{for (j=p;j<=n;j+=j-(j&(j-1)))
{if(j<=n)
b[j]-=q;
}
}
}
fclose(f);
fclose(ff);
return 0;
}