Pagini recente » Cod sursa (job #989877) | Cod sursa (job #696257) | Istoria paginii utilizator/castiel15 | Cod sursa (job #1260064) | Cod sursa (job #201388)
Cod sursa(job #201388)
#include <stdio.h>
#define maxl 15010
int n,m,i,j,k,p,q,s1,s2,sol,div;
int c[maxl],a[maxl],p2[maxl];
inline int biti(int i)
{
sol = i ^ (i & (i-1));
return p2[sol];
}
void update()
{
j=p;
while (j<=n)
{
c[j]-=q;
j+=1<<biti(j);
}
}
void querry()
{
p--;s1=0;s2=0;
while (p>0)
{
s1+=c[p];
p-=1<<biti(p);
}
while (q>0)
{
s2+=c[q];
q-=1<<biti(q);
}
printf("%d\n",s2-s1);
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=2; i<=n; i<<=1)
p2[i]=p2[i>>1]+1;
for (i=1; i<=n; i++)
{
scanf("%d",&k);
a[i]=a[i-1]+k;
}
for (i=1; i<=n; i++)
{
p=i-(1<<biti(i));
c[i]=a[i]-a[p];
}
for (i=1; i<=m; i++)
{
scanf("%d %d %d",&k,&p,&q);
if (k==0) update();
else querry();
}
return 0;
}