Cod sursa(job #1436816)

Utilizator nnnmmmcioltan alex nnnmmm Data 16 mai 2015 14:20:04
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<cstdio>
long long aib[15001];
long long n;
long long put2(long long numar)
{
 return numar xor (numar&(numar-1));
}
void adauga(long long poz,long long elem)
{
 if(put2(poz)==0)
    aib[poz]+=elem,poz++;
 while(poz<=n)
       {
        aib[poz]+=elem;
        poz+=(put2(poz));
       }
}
// Suma(1,poz)
long long suma(long long poz)
{
 long long 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);
 long long m;
 scanf("%lld %lld ",&n,&m);
 for(long long i=1;i<=n;i++)
     {
      long long val;
      scanf("%lld ",&val);
      adauga(i,val);
     }
 for(long long i=1;i<=m;i++)
     {
      bool tip;
      long long x,y;
      scanf("%lld %lld %lld ",&tip,&x,&y);
      switch(tip)
             {
              case 0:
                     {
                      adauga(x,-y);
                      break;
                     };
              case 1:
                     {
                      printf("%lld\n",suma(y)-suma(x-1));
                      break;
                     };
             }
     }
fclose(stdin);
fclose(stdout);
return 0;
}