Pagini recente » Cod sursa (job #2802360) | Cod sursa (job #2837292) | Cod sursa (job #76182) | Cod sursa (job #2809380) | Cod sursa (job #2574075)
#include<bits/stdc++.h>
using namespace std;
const int NMAX=100005;
long long aib[NMAX],n;
void update(long long val, long long poz){
for(long long i=poz;i<=n;i+=(-i)&i)
aib[i]+=val;
}
long long query(long long poz){
long long s=0;
for(long long i=poz;i>=1;i-=(-i)&i)
s+=aib[i];
return s;
}
long long binSearch(long long val){
long long st=1,dr=n;
while(st<=dr){
long long mij=(st+dr)/2;
if(query(mij)==val)
return mij;
if(query(mij)>val)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int m;
scanf("%d%d", &n, &m);
for(int i=1;i<=n;i++){
long long nr;
scanf("%lld", &nr);
update(nr, i);
}
for(int q=1;q<=m;q++){
long long cer,nr;
scanf("%lld%lld", &cer, &nr);
if(cer==0){
long long val;
scanf("%lld", &val);
update(val, nr);
}
else if(cer==1){
long long nr2;
scanf("%lld", &nr2);
printf("%lld\n", query(nr2)-query(nr-1));
}
else
printf("%lld\n", binSearch(nr));
}
return 0;
}