Pagini recente » Cod sursa (job #2538478) | Autentificare | Cod sursa (job #2641178) | Cod sursa (job #245139) | Cod sursa (job #2171233)
#include<bits/stdc++.h>
#define lbs(x) (x^(x-1))&x
using namespace std;
int N,M,tip,a,b,v[100001],Aib[400001];
void Update(int x,int y){
for(int i=x;i<=N;i+=lbs(i))
Aib[i]+=y;
}
int sum(int poz){
int S=0;
for(int i=poz;i>0;i-=lbs(i))
S+=Aib[i];
return S;
}
int solve(int x){
int st=1,dr=N,mij;
while(st<=dr){
mij=(st+dr)/2;
int s=sum(mij);
if(x==s)return mij;
else if(x<s)dr=mij-1;
else st=mij+1;
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i){
scanf("%d",&v[i]);
Update(i,v[i]);
}
while(M--){
scanf("%d",&tip);
if(tip==0){
scanf("%d%d",&a,&b);
Update(a,b);
}else if(tip==1){
scanf("%d%d",&a,&b);
printf("%d\n",sum(b)-sum(a-1));
}else{
scanf("%d",&a);
printf("%d\n",solve(a));
}
}
return 0;
}