Cod sursa(job #1583656)

Utilizator nnnmmmcioltan alex nnnmmm Data 29 ianuarie 2016 10:21:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
int N;
const int NMAX=10000005;
int aib[NMAX],v[NMAX];
int lsb(int val)
{
 return val&(-val);
}
void update(int poz,int val)
{
 for(;poz<=N;poz+=lsb(poz))
     aib[poz]+=val;
}
int query(int poz)
{
 int S=0;
 for(;poz;poz-=lsb(poz))
     S+=aib[poz];
 return S;
}
int main()
{
 //freopen("a.in","r",stdin);
 //freopen("a.out","w",stdout);
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 int n,m;
 scanf("%d %d",&n,&m);
 N=n;
 for(int i=1;i<=n;i++)
     scanf("%d ",&v[i]),update(i,v[i]);
 for(int i=1;i<=m;i++)
     {
      int tip,a,b;
      scanf("%d %d %d ",&tip,&a,&b);
      if(tip==0)
         {
          v[a]-=b;
          update(a,-b);
         }
      else
         {
          printf("%d\n",query(b)-query(a-1));
         }
     }
}