Pagini recente » Cod sursa (job #1432371) | Cod sursa (job #2362324) | Cod sursa (job #569645) | Cod sursa (job #2913189) | Cod sursa (job #2019341)
#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;}