Cod sursa(job #195374)

Utilizator MciprianMMciprianM MciprianM Data 18 iunie 2008 08:42:57
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
using namespace std;
int aib[15001], n;
//clientul din ziua poz achita suma val
void  update(int poz, int val){
   while(poz<=n){
     aib[poz] -= val;
     poz+=(poz&(~(poz-1)));
   }
}
//intoarce datoria intre zilele p si q
int query(int p, int q){
   if(p>1){
      return (query(1,q)-query(1,p-1));
   }
   else{
     int s=0;
     while(q>0){
       s+=aib[q];
       q-=(q&(~(q-1)));
     }
     return s;
   }
}
int main(){
  int m, i, x,v,t;
  ifstream f("datorii.in");
  f>>n>>m;
  for(i=1;i<=n;i++){
    f>>x;
    update(i,-x);//se aduna la aib[i] pe x <=>  se scade  din aib[i] pe -x
  }
  ofstream g("datorii.out");
  for(i=0;i<m;i++){
    f>>x>>v>>t;
    if(x==0)
      update(v,t);
    else if(x==1)
	   g<<query(v,t)<<'\n';
  }
  g.close();
  return 0;
}