Pagini recente » Cod sursa (job #1042531) | Cod sursa (job #1089288) | Cod sursa (job #1204759) | Cod sursa (job #2495888) | Cod sursa (job #2394103)
#include<bits/stdc++.h>
#define N 100020
using namespace std;
int n,m;
int a[N], bit[N];
void update(int i, int val) {
for (; i<=n; i+=i&(-i)) {
bit[i]+=val;
}
}
int query(int i) {
int s=0;
for (; i; i-=i&(-i)) {
s+=bit[i];
}
return s;
}
int get(int v) {
int st=1;
for (st; st<=n; st*=2);
for (int i=0; i<=n && st; st/=2) {
if (i+st<=n) {
if (bit[i+st]<=v) {
i+=st;
v-=bit[i];
if (!v) return i;
}
}
}
if (v) return -1;
}
int main(){
ifstream cin("aib.in");
ofstream cout("aib.out");
cin>>n>>m;
for (int i=1; i<=n; ++i) {
cin>>a[i]; update(i,a[i]);
}
while (m--) {
int c,x,y; cin>>c>>x;
if (c==2) {
cout<<get(x)<<'\n';
} else {
cin>>y;
if (!c) {
update(x,y);
a[x]+=y;
} else { int sm=0;
for( int i=x; i<=y; ++i) sm+=a[i];
cout<<query(y)-query(x-1)<<'\n';
}
}
}
return 0;
}