Pagini recente » Cod sursa (job #1369858) | Cod sursa (job #140784) | Cod sursa (job #2690295) | Cod sursa (job #638033) | Cod sursa (job #2930550)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int kN = 1e5 + 5;
int fen[4 * kN];
int q, n;
void update (int bit, int x){
for (; bit <= n; bit += -bit & bit){
fen[bit] += x;
}
}
int query (int bit){
int ans = 0;
for (; bit > 0; bit -= -bit & bit){
ans += fen[bit];
}
return ans;
}
int main(){
fin >> n >> q;
for (int i = 1; i <= n; i++){
int x; fin >> x;
update(i, x);
}
while (q--){
int o; fin >> o;
if (o == 0){
int x, y; fin >> x >> y;
update(x, y);
}
if (o == 1){
int x, y; fin >> x >> y;
fout << query(y) - query(x - 1) << '\n';
}
if (o == 2){
int a; fin >> a;
int l = 1, r = n, ans = n;
while (l <= r){
int mid = l + (r - l) / 2;
if (query(mid) >= a){
ans = mid;
r = mid - 1;
}
else{
l = mid + 1;
}
}
if (query(ans) == a){
fout << ans << '\n';
}
else{
fout << -1 << '\n';
}
}
}
}