Pagini recente » Cod sursa (job #3290504) | Cod sursa (job #3285894) | Rating Bereczki Norbert Cristian (brcz) | Cod sursa (job #1170949) | Cod sursa (job #3286430)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int t,n,m,i,j,a,b,c,v[100003],q,aib[100003];
int lsb(int x){return (x&(-x));}
void add(int poz,int val){
for (int i=poz;i<=n;i+=lsb(i)){
aib[i]+=val;
}
}
int sum(int poz){
int s=0;
for(int i=poz;i>0;i-=lsb(i)){
s+=aib[i];
}
return s;
}
int sum_int(int st,int dr){
return sum(dr)-sum(st-1);
}
void pref(int val){
int st=1,dr=n,mid,aux,poz=1e9;
while(st<=dr){
mid=(st+dr)/2;
aux=sum(mid);
if (aux>=val){
dr=mid-1;
poz=mid;
}
else {
st=mid+1;
}
}
if (sum(poz)==val)
g<<poz<<'\n';
else g<<-1<<'\n';
}
int main()
{ f>>n>>q;
for (i=1;i<=n;i++){
f>>v[i];
add(i,v[i]);
}
for (i=1;i<=q;i++){
f>>c;
if (c==0){
f>>a>>b;
add(a,b);
}
else if (c==1){
f>>a>>b;
g<<sum_int(a,b)<<'\n';
}
else if (c==2){
f>>a;
pref(a);
}
}
return 0;
}