Cod sursa(job #226692)

Utilizator MciprianMMciprianM MciprianM Data 2 decembrie 2008 15:26:46
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;
int arbint[65536];
int n,m;
int poz, val, start, finish;
void update(int nod, int left,  int right){
  if(left<right){
    int m=(left+right)/2;
    if(poz<=m)  update(nod*2, left, m);
    else update(nod*2+1, m+1, right);
    arbint[nod]=arbint[nod*2]+arbint[nod*2+1];
  }
  else{
    arbint[nod]+=val;
  }
}
int sum;
void query(int nod, int left, int right){
  if(start<=left&&right<=finish)
    sum += arbint[nod];
  else
  {
        int m=(left+right)/2;
        if(start<=m)  query(nod*2,left, m);
        if(finish>m) query(nod*2+1,m+1,right);
  }
}
int main(){
  int i,A,B, x;
  ifstream f("datorii.in");
  ofstream g("datorii.out");
  f>>n>>m;
  for(i=0;i<n;++i){
    f>>x;
    poz=i+1; val=x;
    update(1,1,n);
  }
  for(i=0;i<m;i++){
    f>>x>>A>>B;
    if(x==0){
      poz=A;val=-B;
      update(1,1,n);
    }
    else
    {
       start=A; finish=B;sum=0;
       query(1,1,n);
       g<<sum<<'\n';
    }
  }
  f.close();
  g.close();
  return 0;
}