Cod sursa(job #2515942)

Utilizator Chris.sCristian Chris.s Data 29 decembrie 2019 20:29:03
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <iostream>

int init[100005],t[100000005],a,b,rez,x;

inline int max(int a,int b)
 {
 return a>b?a:b;}
void arbore(int st,int dr,int poz)
{
      if (st==dr)
        {init[st]=poz;
        return ;
        }

       x=(st+dr)/2;
      arbore(st,x,2poz);
      arbore(x+1,dr,2poz+1);
}
void a1(int poz,int val)
  {
     int x=init[poz];
     t[x]=val;
     x>>=1;
     while(x)
     {t[x]=t[x]+val;
      x>>=1;
    }
}


void a2(int poz,int val)
{
     int x=init[poz];
     t[x]=t[x]-val;
    x>>=1;
     while(x)
     {t[x]=t[x]-val;
      x>>=1;
}
}

void interogare(int st,int dr,int poz)
{
     if (st>b||dr<a) return;
     if (a<=st&&dr<=b)
               rez=rez+t[poz];
          else
          if (st<dr)
               {int x=(st+dr)/2;
                 interogare(st,x,poz2);
                 interogare(x+1,dr,poz2+1);
                 }
}

int main()
{int i,x,n,m;
     ifstream f("datorii.in");
     ofstream g("datorii.out");
     f>>n>>m;

     arbore(1,n,1);

     for(i=1;i<=n;i=i+1)
      {f>>x;
        a1(i,x);
        }


for(i=1;i<=m;i++)
 {
                   f>>x>>a>>b;

                   if (x==1)
                   {rez=0;
                    interogare(1,n,1);
                    g<<rez<<"\n";
                    }
                    else
                    if (x==0)
                       a2(a,b);
}
f.close();
g.close();
return 0;
}