Pagini recente » Cod sursa (job #1542272) | Cod sursa (job #913621) | Istoria paginii runda/asdf1/clasament | Cod sursa (job #447079) | Cod sursa (job #1170568)
#include <stdio.h>
#include <memory.h>
#define MAXARBELS 15001
long aib [MAXARBELS];
long n,m;
void Operare(long id, long vl)
{
long poz=id;
while (poz<=n)
{
aib[poz]+=vl;
poz+=poz^(poz-1)&poz;
};
};
long InterogareSimpla(long panla)
{
if (panla==0) return 0;
long sum=0;
long poz=panla;
while (poz)
{
sum+=aib[poz];
poz-=poz^(poz-1)&poz;
};
return sum;
};
long Interogare(long dela, long panla)
{
if (dela!=1)
{
return Interogare(1,panla)-Interogare(1,dela-1);
}
else
{
long sum=0;
long poz=panla;
while (poz)
{
sum+=aib[poz];
poz-=poz^(poz-1)&poz;
};
return sum;
};
};
void PrecomputeStuff(void)
{
// memset(p2,0,n*sizeof(long));
// p2[0]=1; p2[1]=2;
long i,poz;
// for (i=2; i<=MAXPOW2; i++) { p2[i]=p2[i-1]*2; };
// memset(c0,0,n*sizeof(long));
/* for (i=1; i<=n; i++) {
if (c0[i]==0) {
if (c0[i+1]==0) c0[i+1]=1;
} else {
poz=i;
while (poz<=n) {
if (c0[poz+p2[c0[poz]]]==0) c0[poz+p2[c0[poz]]]=c0[poz]+1;
poz+=p2[c0[poz]];
};
};
};*/
/* for (i=1; i<=n; i++) {
c0[i]=i^(i-1)&i;
};*/
// for (i=1; i<=n; i++) {
// if (p2[c0[i]]!=( ((i)&(i-1))^(i) )) prlongf("error at %ld; %ld insteadof %ld\n",i,c0[i],((i)&(i-1)^(i)));
// };
memset(aib,0,n*sizeof(long));
};
int main (void)
{
FILE * fi=fopen("datorii.in","r");
FILE * fo=fopen("datorii.out","w");
fscanf(fi,"%ld %ld",&n,&m);
long i,x;
PrecomputeStuff();
for (i=0; i<n; i++)
{
fscanf(fi,"%ld",&x);
Operare(i+1,x);
};
long pa,pb;
long op;
for (i=0; i<m; i++)
{
fscanf(fi,"%ld %ld %ld",&op,&pa,&pb);
if (op==0)
{
Operare(pa,-pb);
}
else
{
fprintf(fo,"%ld\n",InterogareSimpla(pb)-InterogareSimpla(pa-1));
};
};
fclose(fi);
fclose(fo);
return 0;
};