Pagini recente » Cod sursa (job #1424344) | Cod sursa (job #2904589) | Cod sursa (job #1309247) | Cod sursa (job #2561769) | Cod sursa (job #1933425)
#include<fstream>
using namespace std;
ifstream f("aib.in"); ofstream g("aib.out");
int t,a,b,n,m,x,c[100001];
void update(int poz, int val){
for(int i=poz; i<=n; i+= (i & -i)) c[i]+=val;
}
int sum(int st, int dr){
int s=0;
for(int i=dr; i; i-=(i & -i)) s+=c[i];
for(int i=st-1; i; i-=(i & -i)) s-=c[i];
return s;
}
void query(int a){
int st=1, dr=n;
int mid,acm;
while(st<=dr){
mid=(st+dr)/2;
acm=sum(1,mid);
if(acm==a){ g<<mid<<'\n'; return ;}
if(acm>a) { dr=mid-1; continue;}
else st=mid+1;
}
g<<-1<<'\n';
}
int main(){
f>>n>>m;
for(int i=1;i<=n;++i){ f>>x; update(i,x);}
for(int i=1;i<=m;++i){
f>>t;
if(t==2){
f>>a;
query(a);
}
else{
f>>a>>b;
if(t==0) update(a,b);
else g<<sum(a,b)<<'\n';
}
}
g.close();
return 0;
}