Pagini recente » Cod sursa (job #2629115) | Cod sursa (job #2736219) | Cod sursa (job #2983012) | Cod sursa (job #86782) | Cod sursa (job #2575412)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int MAXN = 1e5;
const int MAXM = 15e4;
const int MAXVAL = 1e4;
int n, m;
int aib[MAXN + 1];
void update(int idx, int val) {
while (idx <= n) {
aib[idx] += val;
idx += idx & (-idx);
}
}
int query(int idx) {
int ret = 0;
while (idx > 0) {
ret += aib[idx];
idx -= idx & (-idx);
}
return ret;
}
int main() {
in >> n >> m;
int nr;
for (int i = 1; i <= n; ++ i) {
in >> nr;
update(i, nr);
}
int q, a, b;
for (int i = 1; i <= m; ++ i) {
in >> q;
if (q == 0) {
in >> a >> b;
update(a, b);
}
if (q == 1) {
in >> a >> b;
out << query(b) - query(a - 1) << '\n';
}
if (q == 2) {
in >> a;
int bitmask = 0;
int sum = 0;
int bit = 20;
while (bit >= 0) {
if ((1 << bit) + bitmask <= n && sum + aib[(1 << bit) + bitmask] < a) {
bitmask += 1 << bit;
sum += aib[bitmask];
}
-- bit;
}
++ bitmask;
if (query(bitmask) == a) out << bitmask << '\n';
else out << -1 << '\n';
}
}
return 0;
}