Pagini recente » Cod sursa (job #1728597) | Rating Ioana Andreea Marin (IoanaMarin) | Cod sursa (job #1694783) | Cod sursa (job #559068) | Cod sursa (job #2649489)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout("aib.out");
int n;
vector<int> ai;
void update(int ind, int val, int le=1, int ri=n, int pos=1){
int mid=(le+ri)/2;
ai[pos]+=val;
if(le!=ri)
if(ind<=mid) update(ind,val, le,mid, 2*pos);
else update(ind,val, mid+1,ri, 2*pos+1);
}
int sum(int a, int b, int le=1, int ri=n, int pos=1){
// cout<<le<<" "<<ri<<"\n";
// cout<<a<<" "<<b<<"\n";
// cout<<pos<<"\n\n";
if(a==le and b==ri)
return ai[pos];
int mid=(le+ri)/2, ans=0;
if(a<=mid)
ans+=sum(a,min(mid,b), le,mid, pos*2);
if(b>mid)
ans+=sum(max(mid+1,a),b, mid+1,ri, 2*pos+1);
return ans;
}
int main() {
int m; fin>>n>>m;
ai.resize(4*n+1,0);
for(int i=1;i<=n;++i){
int x;
fin>>x;
update(i,x);
}
// for(auto x:ai)
// cout<<x<<" ";
for(int i=1;i<=m;++i){
int x,y,z;
fin>>x>>y;
if(x<=1){
fin>>z;
if(x==0)
update(y,z);
else
fout<<sum(y,z)<<"\n";
}
else{
//vedewm
int ans=-1;
int le=1, ri=n;
while(le<=ri){
int mid=(le+ri)/2;
int val=sum(1,mid);
// cout<<mid<<" "<<val<<"\n";
if(val==y){
ans=mid;
goto ff;
}
if(val>y) ri=mid-1;
else le=mid+1;
}
ff:fout<<ans<<"\n";
}
}
}