Pagini recente » Cod sursa (job #623965) | Cod sursa (job #1501134) | Cod sursa (job #2984864) | Cod sursa (job #2732600) | Cod sursa (job #2195965)
#include <bits/stdc++.h>
using namespace std;
int a[100010], n, m;
void update(int i, int val){
while (i <= n){
a[i] += val;
i += (i & -i);
}
}
int query(int idx){
int rs = 0;
while (idx > 0){
rs += a[idx];
idx -= (idx & -idx);
}
return rs;
}
int main(){
ifstream cin ("aib.in");
ofstream cout ("aib.out");
cin >> n >> m;
for (int i=1, x; i<=n; i++) cin >> x, update(i, x);
for (int i=1, o, x, y; i<=m; i++){
cin >> o >> x;
if (o == 2){
int st = 1, dr = n;
while (st <= dr){
int mid = (st + dr) >> 1;
if (query(mid) < x) st = mid + 1;
else dr = mid - 1;
}
if (query(st) == x) cout << st << "\n";
else cout << "-1\n";
continue;
}
cin >> y;
if (!o) update(x, y);
else if (o == 1) cout << query(y) - query(x-1) << "\n";
}
return 0;
}