Pagini recente » Cod sursa (job #2678943) | Cod sursa (job #310718) | Cod sursa (job #859672) | Cod sursa (job #330082) | Cod sursa (job #3258782)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long n,m,x,y,i,j,k,c,aib[100001];
bool ok;
void update(int p, int val){
for(;p<=n;p+=(p&-p))
aib[p] += val;
}
long long query(int p){
long long sum=0;
for(;p>0;p-=(p&-p))
sum += aib[p];
return sum;
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>x,update(i,x);
while(m--){
fin>>c;
if(c == 0){
fin>>x>>y;
update(x, y);
}else if(c == 1){
fin>>x>>y;
fout<<query(y)-query(x-1)<<'\n';
}else{
fin>>x;
ok=0;
for(k=(1<<18),i=0; k; k >>= 1){
if(i+k>n)
continue;
if(aib[i+k]<=x){
i += k;
x -= aib[i];
if(!x){
ok=1;
fout<<i<<'\n';
}
}
}
if(!ok)
fout<<"-1\n";
}
}
return 0;
}