Pagini recente » Cod sursa (job #697132) | Cod sursa (job #700925) | Cod sursa (job #260675) | Cod sursa (job #461971) | Cod sursa (job #2734296)
#include<fstream>
using namespace std;
const int N = 4e5 + 5;
int arb[N], n, x, y, o, q, sum;
ifstream cin ("aib.in");
ofstream cout ("aib.out");
void update (int nod, int st, int dr) {
if (st == dr) {
arb[nod] += y;
return;
}
int mid = (st + dr) / 2;
if (x <= mid)
update(2 * nod, st, mid);
else
update(2 * nod + 1, mid + 1, dr);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
void query (int nod, int st, int dr) {
if (st >= x && y >= dr) {
sum += arb[nod];
return;
}
int mid = (st + dr) / 2;
if (x <= mid)
query(2 * nod, st, mid);
if (y > mid)
query(2 * nod + 1, mid + 1, dr);
}
int main() {
cin >> n >> q;
for (x = 1; x <= n; x++) {
cin >> y;
update(1, 1, n);
}
while (q--) {
cin >> o;
if (o < 2) {
cin >> x >> y;
if (o) {
sum = 0;
query(1, 1, n);
cout << sum << "\n";
} else
update(1, 1, n);
} else {
x = 1;
int what;
cin >> what;
int st = 1, dr = n;
while (st <= dr) {
sum = 0;
y = (st + dr) / 2;
query(1, 1, n);
if (sum >= what)
dr = y - 1;
else
st = y + 1;
}
sum = 0;
y = dr + 1;
query(1, 1, n);
if (sum == what)
cout << y << "\n";
else
cout << "-1\n";
}
}
}