Pagini recente » Cod sursa (job #2481523) | Cod sursa (job #2712359) | Cod sursa (job #2616264) | Cod sursa (job #1353833) | Cod sursa (job #2800734)
#include <bits/stdc++.h>
using namespace std;
inline void Open(const string Name) {
#ifndef ONLINE_JUDGE
(void)!freopen((Name + ".in").c_str(), "r", stdin);
(void)!freopen((Name + ".out").c_str(), "w", stdout);
#endif
}
int bit[100001];
int N, M;
void add(int idx, int plus) {
for(;idx <= N;idx += idx & -idx)
bit[idx] += plus;
}
int sum(int idx) {
int res = 0;
for(;idx > 0;idx -= idx & -idx)
res += bit[idx];
return res;
}
int Query(int L, int R) {
return sum(R) - sum(L - 1);
}
int Find(int x) {
int y = 0;
for(int k = (1 << 17);k >= 1;k >>= 1) {
if(y + k < N && bit[y + k] < x)
x -= bit[y + k], y += k;
}
return y + 1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Open("aib");
cin >> N >> M;
for(int i = 1, plus;i <= N;i++)
cin >> plus, add(i, plus);
while(M--) {
int T, a, b;
cin >> T;
if(T == 0)
cin >> a >> b, add(a, b);
if(T == 1)
cin >> a >> b, cout << Query(a, b) << "\n";
if(T == 2) {
cin >> a;
int ans = Find(a);
cout << ((sum(ans) == a)? ans : -1) << "\n";
}
}
return 0;
}