Cod sursa(job #1436825)

Utilizator nnnmmmcioltan alex nnnmmm Data 16 mai 2015 14:39:37
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
int aib[150001];
int n;
int put2(int numar)
{
 return numar xor (numar&(numar-1));
}
void adauga(int poz,int elem)
{
 if(put2(poz)==0)
    aib[poz]+=elem,poz++;
 while(poz<=n)
       {
        aib[poz]+=elem;
        poz+=(put2(poz));
       }
}
// Suma(1,poz)
int suma(int poz)
{
 int S=0;
 while(poz>0)
       {
        S+=aib[poz];
        poz-=(put2(poz));
       }
 return S;
}
int main()
{
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 int m;
 scanf("%d %d ",&n,&m);
 for(int i=1;i<=n;i++)
     {
      int val;
      scanf("%d ",&val);
      adauga(i,val);
     }
 for(int i=1;i<=m;i++)
     {
      bool tip;
      int x,y;
      scanf("%d %d %d ",&tip,&x,&y);
      switch(tip)
             {
              case 0:
                     {
                      adauga(x,-y);
                      break;
                     };
              case 1:
                     {
                      printf("%d\n",suma(y)-suma(x-1));
                      break;
                     };
             }
     }
fclose(stdin);
fclose(stdout);
return 0;
}