Pagini recente » Cod sursa (job #3364433) | Cod sursa (job #3365324) | Cod sursa (job #3364528) | Cod sursa (job #3364592) | Cod sursa (job #3365329)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, op, x, y, m;
vector<long long> t;
void add(int k, int val){
while(k <= n){
t[k] += val;
k += (k & -k);
}
}
long long sum(int k){
long long s = 0;
while(k){
s += t[k];
k -= (k & -k);
}
return s;
}
int main()
{
int i, left, right, mid, pos;
long long val;
fin >> n >> m;
t.resize(n + 1);
for(i = 1; i <= n; ++i){
fin >> val;
add(i, val);
}
for(i = 1; i <= m; ++i){
fin >> op;
if(op == 0){
fin >> x >> y;
add(x, y);
}else if(op == 1){
fin >> x >> y;
fout << sum(y) - sum(x - 1) << endl;
}else{
fin >> x;
pos = -1;
left = 1, right = n;
while(left <= right){
mid = (left + right) / 2;
val = sum(mid);
if(val > x){
right = mid - 1;
}else if(val < x){
left = mid + 1;
}else{
pos = mid;
break;
}
}
fout << pos << endl;
}
}
return 0;
}