Cod sursa(job #1023990)

Utilizator george_stelianChichirim George george_stelian Data 7 noiembrie 2013 23:06:44
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#include <cstdlib>
#define putere(x) ((x^(x-1))&x)

using namespace std;

int v[15010],n,m,i,x,y,a;

void operatie1(int i,int x)
{
    for(;i<=n;i+=putere(i))
    {
        v[i]-=x;
    }
}

int operatie2(int i)
{
    int s=0;
    for(;i;i-=putere(i))
    {
        s+=v[i];
    }
    return s;
}

int main()
{
   freopen("datorii.in", "r", stdin);
   freopen("datorii.out", "w", stdout);
   scanf("%d%d",&n,&m);
   for(i=1;i<=n;i++)
   {
       scanf("%d",&x);
       operatie1(i,-x);
   }
   for(i=1;i<=m;i++)
   {
       scanf("%d%d%d",&a,&x,&y);
       if(a)
       {
           printf("%d\n",operatie2(y)-operatie2(x-1));
       }
       else
       {
           operatie1(x,y);
       }
   }
   fclose(stdin);fclose(stdout);
    return 0;
}