Pagini recente » Cod sursa (job #2621401) | Cod sursa (job #2381473) | Cod sursa (job #3139228) | Cod sursa (job #692865) | Cod sursa (job #1804910)
#include <bits/stdc++.h>
using namespace std;
int n,q,a[100005],x,y,z;
void Upd(int pos, int val){
int p=0;
while(pos<=n){
a[pos]+=val;
while(!(pos & (1<<p))) p++;
pos+=(1<<p);
}
}
int Qry(int pos){
int p=0,s=0;
while(pos>=1){
s+=a[pos];
while(!(pos & (1<<p))) p++;
pos-=(1<<p);
}
return s;
}
int Search(int val){
int l=0,r=n;
while(l!=r){
int mid=(l+r)/2;
if(Qry(mid)>=val) r=mid;
else l=mid+1;
}
if(Qry(l)==val) return l;
return -1;
}
int main(){
ios_base::sync_with_stdio(0);
ifstream in("aib.in");
ofstream out("aib.out");
in >> n >> q;
for(int i=1;i<=n;i++){
in >> x;
Upd(i,x);
}
for(int i=1;i<=q;i++){
in >> x;
if(x==0){
in >> y >> z;
Upd(y,z);
}
if(x==1){
in >> y >> z;
out << Qry(z)-Qry(y-1) << '\n';
}
if(x==2){
in >> y;
out << Search(y) << '\n';
}
}
}