Mai intai trebuie sa te autentifici.
Cod sursa(job #114484)
| Utilizator | Data | 14 decembrie 2007 15:02:24 | |
|---|---|---|---|
| Problema | Datorii | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.8 kb |
#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;
}