Pagini recente » Cod sursa (job #404182) | Cod sursa (job #804022) | Cod sursa (job #3200462) | Cod sursa (job #2191911) | Cod sursa (job #199198)
Cod sursa(job #199198)
#include<stdio.h>
#include<math.h>
FILE *f,*g;
int a[15001],baza[15001],j,p,op,q,n;
long i,v[15001],suma,s1,s2,m;
int baza2(int n)
{ int x=0;
while(n!=0)
{ if(n%2==0) x++; else return x;
n/=2;
}
return x;
}
int main()
{ f=fopen("datorii.in","r"); g=fopen("datorii.out","w");
fscanf(f,"%d%ld",&n,&m);
for(i=1;i<=n;i++) { fscanf(f,"%d",&a[i]); a[i]=a[i]+a[i-1]; }
for(i=1;i<=n;i++)
{ baza[i]=pow(2,baza2(i));
v[i]=a[i]-a[i-baza[i]];
}
for(i=1;i<=m;i++)
{ fscanf(f,"%d",&op);
if(op==0)
{ fscanf(f,"%d%d",&j,&suma);
while(j<=n)
{ v[j]=v[j]-suma;
j=j+baza[j];
}
}
else if(op==1)
{ fscanf(f,"%d%d",&p,&q);
j=q; s1=0; s2=0;
while(j!=0)
{ s1=s1+v[j];
j=j-baza[j];
}
j=p-1;
while(j!=0)
{ s2=s2+v[j];
j=j-baza[j];
}
fprintf(g,"%ld\n",s1-s2);
}
}
fclose(g);
}