Pagini recente » Cod sursa (job #1689240) | Cod sursa (job #1210989) | Cod sursa (job #1755910) | Cod sursa (job #3236256) | Cod sursa (job #2112922)
#include <bits/stdc++.h>
using namespace std;
int A[100010],n,m,o,a,b;
void update(int pos, int val){
while (pos <= n){
A[pos] += val;
pos += (pos & -pos);
}
}
int query(int pos){
int ans = 0;
while (pos > 0){
ans += A[pos];
pos -= (pos & -pos);
}
return ans;
}
int interval(int st, int dr){
return query(dr) - query(st - 1);
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ifstream cin ("aib.in");
ofstream cout ("aib.out");
cin >> n >> m;
for (int i=1; i<=n; i++) {
cin >> o;
update(i, o);
}
while (m--){
cin >> o;
if (!o){
cin >> a >> b;
update(a, b);
}
else if (o == 1){
cin >> a >> b;
cout << interval(a, b) << "\n";
}
else{
cin >> a;
int st=1, dr=n, mid;
while (st <= dr){
mid = (st + dr)/2;
if (query(mid) >= a) dr = mid - 1;
else st = mid + 1;
}
if (query(st) == a) cout << st << "\n";
else cout << "-1\n";
}
}
return 0;
}