Pagini recente » Cod sursa (job #747622) | Cod sursa (job #1222474) | Cod sursa (job #3254375) | Cod sursa (job #1795106) | Cod sursa (job #2492172)
#include <bits/stdc++.h>
using namespace std;
int n;
int v[100001];
int aib[100001];
int query(int x){
int sum = 0,i;
for(i = x;i > 0;i -= i&(-i)){
sum += aib[i];
}
return sum;
}
void update(int x,int val){
int i;
for(i = x;i <= n;i += i&(-i)){
aib[i] += val;
}
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
int i,m;
cin >> n >> m;
for(i = 1;i <= n;i++){
cin >> v[i];
update(i,v[i]);
}
while(m--){
int tip,a,b;
cin >> tip >> a;
if(tip == 0){
cin >> b;
update(a,b);
}else if(tip == 1){
cin >> b;
cout << query(b) - query(a - 1) << "\n";
}else{
int r = 0,pas = 1 << 16;
while(pas){
if(r + pas <= n && query(r + pas) < a)
r += pas;
pas /= 2;
}
if(query(r + 1) == a)
cout << r + 1<< "\n";
else
cout << -1 << "\n";
}
}
return 0;
}