Pagini recente » Cod sursa (job #3258487) | Cod sursa (job #3330809) | Cod sursa (job #3328348) | Cod sursa (job #3210262) | Cod sursa (job #3336859)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
#define pb push_back
#define nl '\n'
int aib[100001],v[100001],n;
void update(int poz,int val){
for(int i=poz;i<=n;i+=(i&(-i)))
aib[i]+=val;
}
int query(int x){
int s=0;
for(int i=x; i>0; i-=i&-i)
s+=aib[i];
return s;
}
int query(int st, int dr){
return query(dr)-query(st-1);
}
int main(){
fin>>n;
int q;
fin>>q;
for(int i=1;i<=n;++i){
fin>>v[i];
v[i]+=v[i-1];
aib[i]=v[i]-v[i-(i&(-i))];
}
for(int i=1;i<=q;++i){
int t;
fin>>t;
if(t==0){
int poz,val;
fin>>poz>>val;
update(poz,val);
}
else if(t==1){
int x,y;
fin>>x>>y;
fout<<query(x,y)<<nl;
}
else {
int x;
fin>>x;
int st=1,r=-1;
int dr=n;
while(st<=dr){
int mij=(st+dr)>>1;
int sum=query(mij);
if(sum>=x)dr=mij-1,r=mij;
else st=mij+1;
}
fout<<r<<nl;
}
}
}