Pagini recente » Cod sursa (job #3273757) | Cod sursa (job #729901) | Cod sursa (job #74573) | Cod sursa (job #1260176) | Cod sursa (job #173678)
Cod sursa(job #173678)
#include <fstream>
using namespace std;
const int NMAX = 1 << 17;
int N, AIB[NMAX];
void update(int p, int v) {
for (; p <= N; p += p & ~(p - 1))
AIB[p] += v;
}
int query(int p) {
int r;
for (r = 0; p; p -= p & ~(p - 1))
r += AIB[p];
return r;
}
int main(void) {
ifstream fin("aib.in");
ofstream fout("aib.out");
int M, i, u, v, t, a, b, p;
fin >> N >> M;
for (i = 1; i <= N; ++i)
fin >> u, update(i, u);
for (i = 0; i < M; ++i) {
fin >> t;
if (t == 0) {
fin >> a >> b;
update(a, b);
} else if (t == 1) {
fin >> a >> b;
fout << query(b) - query(a - 1) << '\n';
} else {
fin >> a;
for (p = 1; (p << 1) <= N; p <<= 1);
for (b = 0; p; p >>= 1)
if ((v = b + p) <= N && query(v) < a)
b = v;
fout << (query(b + 1) == a ? b + 1 : -1) << '\n';
}
}
fin.close();
fout.close();
return 0;
}