Cod sursa(job #2019341)

Utilizator AsttridMocanu Ada Astrid Asttrid Data 7 septembrie 2017 15:48:27
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100001],n,m;
int p2(int x){
return x&(-x);}

void update(int poz,int k){
int i;
for(i=poz;i<=n;i+=i&(-i))
    aib[i]+=k;
}

int suma(int poz){
int s=0,i;
for(i=poz;i>0;i-=i&(-i))s+=aib[i];
return s;
}


int caut(int x){
int st,dr,m,val;
st=1;dr=n;
while(st<=dr){
    m=(st+dr)/2;
    val=suma(m);
    if(val==x)return m;
    else if(val<x)st=m+1;
    else dr=m-1;}
return -1;
}

void rez(){
in>>n>>m;
int i,p,x,y;
for(i=1;i<=n;i++)
    {in>>x;
    update(i,x);}

for(i=1;i<=m;i++)
{in>>p;
if(p==0){in>>x>>y;
update(x,y);}
else if(p==1){in>>x>>y;
out<<suma(y)-suma(x-1)<<"\n";}
else{in>>x;out<<caut(x)<<"\n";}
}}

int main(){
rez();
in.close();
out.close();
return 0;}