Cod sursa(job #2147465)

Utilizator VarticeanNicolae Varticean Varticean Data 28 februarie 2018 19:24:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int a[60005],n,m,val,lef,rig;
int b[15005];
void update( int nod, int st, int dr, int pos)
{
     if( st == dr )
     {
          a[nod] = val;
          return;
     }
     int mid = ( st+dr ) /2;
     if( pos <=mid ) update( 2*nod,st,mid,pos); else
          update( 2*nod+1, mid+1, dr, pos);
     a[nod] = a[nod*2] + a[nod*2+1];
}

void qwery( int nod, int st, int dr )
{
     if( st >=lef && rig >= dr )
     {
          val += a[nod];
          return;
     }
     int mid = ( st + dr ) /2;
     if( lef <= mid ) qwery(2*nod, st, mid );
     if( rig > mid ) qwery( 2*nod+1, mid+1, dr);
}
int main()
{
     in >> n >> m;
     int x;
     for(int i=1; i<=n; i++)
     {
          in >> x;
          b[i] = x;
          val = x;
          update( 1,1,n,i);
     }

     int qw, y;
     for(int i=1; i<=m; i++)
     {
          in >> qw;
          if( qw == 0)
          {
               in >> x >> y;
               val = b[x]-y;
               b[x]-=y;
               update(1,1,n,x);
          }
          else
          {
               in >> x >> y;
               lef = x; rig = y;
               val =0;
               qwery(1,1,n);
               out << val << '\n';
          }
     }

    return 0;
}