Cod sursa(job #2270178)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 27 octombrie 2018 09:54:02
Problema Datorii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#define NMAX 15000

using namespace std;

int aint[NMAX*4],ans,poz,val,left,right;

void update( int p, int st, int dr ) {
  if( st == dr )
    aint[p] += val;
  else {
    int m = (st + dr) / 2;
    if( poz <= m )
      update( 2*p, st, m );
    else
      update( 2*p + 1, m + 1, dr );
    aint[p] = aint[2*p] + aint[2*p+1];
  }
}

void query( int p, int st, int dr ) {
  if( left <= st && dr <= right )
    ans += aint[p];
  else {
    int m = ( st + dr ) / 2;
    if( left <= m )
      query( 2*p, st, m );
    if( m + 1 <= right )
      query( 2*p + 1, m + 1, dr );
  }
}

int main() {
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int tip,n,m,i,nr;
    scanf("%d%d",&n,&m);
    for( i = 1; i <= n; i ++ ) {
      scanf("%d",&nr);
      val = nr;
      poz = i;
      update( 1,1,n);
    }
    for( i = 1; i <= m; i ++ ) {
      scanf("%d",&tip);
      if( tip == 0 ) {
        scanf("%d%d",&poz,&val);
        val = val * -1;
        update(1,1,n);
      }
      else {
        scanf("%d%d",&left,&right);
        ans = 0;
        query(1,1,n);
        printf("%d\n",ans);
      }
    }
    return 0;
}