Pagini recente » Cod sursa (job #2024155) | Istoria paginii runda/valicaroom1/clasament | Cod sursa (job #975024) | Cod sursa (job #1773614) | Cod sursa (job #1767568)
#include <stdio.h>
#include <stdlib.h>
#define zero(x) ((x^(x-1))&x)
int n,m,s[100010];
void citire();
void rezolvare();
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
citire();
rezolvare();
return 0;
}
void citire()
{
scanf("%d %d ",&n,&m);
int i;
for(i=1;i<=n;i++)
{
int val;
scanf("%d ",&val);
int j;
for(j=i;j<=n;j+=zero(j))
s[j]+=val;
}
}
void adauga(int p1,int p2)
{
int i;
for(i=p1;i<=n;i+=zero(i))
s[i]+=p2;
}
int suma(int x)
{
int t=0,i;
for(i=x;i>=1;i-=zero(i))
t+=s[i];
return t;
}
int interog(int p1,int p2)
{
return suma(p2)-suma(p1-1);
}
void rezolvare()
{
int i;
for(i=1;i<=m;i++)
{
int op,param1,param2;
scanf("%d ",&op);
if(!op)
{
scanf("%d %d ",¶m1,¶m2);
adauga(param1,-param2);
}
else if(op==1)
{
scanf("%d %d ",¶m1,¶m2);
printf("%d\n",interog(param1,param2));
}
}
}