Pagini recente » Cod sursa (job #179650) | Cod sursa (job #2754924) | Cod sursa (job #946426) | Cod sursa (job #710633) | Cod sursa (job #1380396)
#include <iostream>
#include <vector>
using namespace std;
#define MAXN 100010
class FenwickTree {
public:
FenwickTree(const int &size):
size_(size),
data_(size + 1, 0) {
}
void add(int where, int value) {
for (; where <= size_; where += (where & -where)) {
data_[where] += value;
}
}
int query(int where) {
int answer = 0;
for (; where; where -= (where & -where)) {
answer += data_[where];
}
return answer;
}
private:
int size_;
vector<int> data_;
};
int main()
{
int n, m;
cin.sync_with_stdio(false);
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
cin >> n >> m;
FenwickTree T(n);
int a, b;
for (int i = 1; i <= n; i++) {
cin >> a;
T.add(i, a);
}
int op;
while (m--) {
cin >> op;
if (op == 0) {
cin >> a >> b;
T.add(a, b);
} else if (op == 1) {
cin >> a >> b;
cout << (T.query(max(1, b)) - T.query(max(1, a - 1))) << '\n';
} else {
cin >> a;
int lo, hi, val;
lo = 1;
hi = n;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
val = T.query(mid);
if (val == a)
lo = hi = mid;
else if (val < a)
lo = mid + 1;
else
hi = mid;
}
cout << lo << '\n';
}
}
return 0;
}