Cod sursa(job #1210955)

Utilizator DjokValeriu Motroi Djok Data 21 iulie 2014 18:05:03
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#include<algorithm>
using namespace std;

int arb[100005],i,j,n,m,op,x,y;

void update(int poz,int aux) {
   while(poz<=n) arb[poz]+=aux,poz+=(poz&(-poz));  
}

int sum(int poz) {
   int rs=0;
   while(poz>=1) rs+=arb[poz],poz-=(poz&(-poz));
 return rs;   
}

int search(int x) {
  int st=1,dr=n;
  while(st<=dr)
  {
    int pivot=(st+dr)/2,s=sum(pivot);           
    if(s==x) return pivot;
    else if(s>x) dr=pivot-1;
         else st=pivot+1;
  }  
 return -1;
}

int main()
{
  ifstream cin("aib.in");
  ofstream cout("aib.out");  
  
  cin>>n>>m;
  for(i=1;i<=n;++i) cin>>x,update(i,x);
  
  while(m--)
  {
    cin>>op;
    if(!op) cin>>x>>y,update(x,y);
    else if(op==1) cin>>x>>y,cout<<sum(y)-sum(x-1)<<'\n';         
         else cin>>x,cout<<search(x)<<'\n';
  }
    
 return 0;   
}