Pagini recente » Cod sursa (job #1672713) | Cod sursa (job #2373536) | Cod sursa (job #2397350) | Cod sursa (job #349092) | Cod sursa (job #1976955)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100002
ifstream fin("aib.in");
ofstream fout("aib.out");
inline int LSB(const int x) {
return x & (-x);
}
int AIB[NMAX];
inline void addVal(const int N, const int poz, const int val) {
for (int i = poz; i <= N; i += LSB(i))
AIB[i] += val;
}
inline int sum(const int poz) {
int s = 0;
for (int i = poz; i >= 1; i -= LSB(i))
s += AIB[i];
return s;
}
inline int query(const int st, const int dr) {
return sum(dr) - sum(st - 1);
}
int cbinara(int st, int dr, int val) {
int mid, sol = -1;
while (st <= dr) {
mid = (st + dr) >> 1;
int s = sum(mid);
if (s == val)
sol = mid;
if (s < val)
st = mid + 1;
else
dr = mid - 1;
}
return sol;
}
int main() {
int N, Q;
fin >> N >> Q;
int t, x, y;
for (int i = 1; i <= N; ++i) {
fin >> x;
addVal(N, i, x);
}
while (Q--) {
fin >> t;
if (t == 0) {
fin >> x >> y;
addVal(N, x, y);
}
else if (t == 1) {
fin >> x >> y;
fout << query(x, y) << "\n";
}
else if (t == 2) {
fin >> x;
fout << cbinara(1, N, x) << "\n";
}
}
return 0;
}