Cod sursa(job #1948512)

Utilizator alexoloieriAlexandru Oloieri alexoloieri Data 1 aprilie 2017 10:43:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#define LMAX 15005

using namespace std;
FILE *fin=fopen("datorii.in","r");
FILE *fout=fopen("datorii.out","w");

int aib[LMAX];
int n;

void update(int poz, int a, int tip);
int query(int poz);

int main()
{
int i;
int a;
int m;
int c;
int x, y;
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++)
    {
     fscanf(fin,"%d",&a);
     update(i,a,1 );
    }
for (i=1;i<=m;i++)
    {
     fscanf(fin,"%d %d %d",&c,&x,&y);
     switch (c)
        {
         case 0:
          {
           update(x,y,2);
           break;
          }
         case 1:
          {
           fprintf(fout,"%d\n",(query(y)-query(x-1)));
           break;
          }
        }
    }
return 0;
}


void update(int poz, int a, int tip)
    {
     int i;
     for (i=poz;i<=n;i+=(i&(-1*i)))
          if (tip==2)
             aib[i]-=a; else aib[i]+=a;
    }

int query(int poz)
    {
     int s=0;
     int i;
     for (i=poz;i>=1;i-=(i&(-1*i)))
          s+=aib[i];
     return s;
    }