Pagini recente » Cod sursa (job #2709465) | Cod sursa (job #3211601) | Cod sursa (job #1243236) | Cod sursa (job #1286254) | Cod sursa (job #3247221)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int aib[100005];
int v[100005];
int n, m;
void update(int i, int val){
while(i <= n){
aib[i] += val;
i += i&-i;
}
}
int query(int val){
int ret = 0;
while(val){
ret += aib[val];
val -= val&-val;
}
return ret;
}
signed main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> v[i];
update(i, v[i]);
}
for(int i = 1; i <= m; i++){
int cer, x, y;
cin >> cer;
if(cer == 0){
cin >> x >> y;
update(x, y);
v[x] += y;
}
else if(cer == 1){
cin >> x >> y;
cout << query(y) - query(x-1) << '\n';
}
else{
cin >> x;
int l = 1, dr = n;
while(dr > l){
int mid = (l+dr)/2;
int g = query(mid);
if(g >= x)
dr = mid;
else
l = mid + 1;
}
if(query(dr) == x)
cout << dr << '\n';
else
cout << -1 << '\n';
}
}
return 0;
}