Cod sursa(job #2384077)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 20 martie 2019 11:18:45
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
#define DIM 15010
using namespace std;
ifstream f ("datorii.in") ;
ofstream g ("datorii.out") ;
int arb[4*DIM + 20] , v[DIM] ;
int N , M , x;
int poz , val;
long long Sum;
int cer , a , b;
void Update (int nod , int st , int dr)
{
    if (st == dr)
    {
        arb[nod] = val;
        return ;
    }

    int mij = (st + dr) / 2;
    if (poz <= mij) Update(2*nod , st , mij) ;
    else
        Update(2*nod+1,mij+1,dr);

    arb[nod] = arb[2*nod] + arb[2*nod+1] ;
}

void Query(int nod ,int st , int dr , int a, int b)
{
    if (a <= st && dr <= b)
    {
        Sum += arb[nod] ;
        return ;
    }

    int mij = ( st + dr ) / 2;
    if (a <= mij) Query(2*nod , st , mij , a , b) ;
    if (b > mij) Query(2*nod+1, mij+1 , dr , a , b) ;


}
int main()
{
    f >> N >> M ;
    for (int i = 1 ; i <= N ; ++i)
    {
        f >> v[i] ;
        poz = i ;
        val = v[i];
        Update(1,1,N) ;
    }

 //   for (int i = 1 ; i <= 2 * N - 1 ; ++i)
      //  g << arb[i] << ' ';

      for (int i = 1 ; i <= M ; ++i)
      {
          f >> cer >> a >> b;
          if (cer == 0)
          {
              v[a] -= b;
              val = v[a] ;
              poz = a;
              Update(1,1,N) ;

          }
          else
          {
            Sum = 0 ;
            Query(1,1,N,a,b);
            g << Sum << '\n' ;

          }
      }
    return 0 ;

}