Pagini recente » Rating Eduard Gabriel Bazavan (edu) | Cod sursa (job #2947993) | Cod sursa (job #1766742) | Cod sursa (job #2469071) | Cod sursa (job #2857957)
#include <cstdio>
#include <cstdlib>
#include <exception>
#include <iostream>
#define SZ 100001
int N;
static constexpr int zeroes(int x) {
return (x & (-x));
}
enum op {
ADD = 0,
SUM = 1,
SHIT = 2
};
class aib {
private:
int v[SZ];
public:
void add(int p, int x) {
for (int i = p; i <= N; i += zeroes(i)) {
v[i] += x;
}
}
int sum(int p) {
int r = 0;
for (int i = p; i > 0; i -= zeroes(i)) {
r += v[i];
}
return r;
}
int thatOneShittyFunction(int x) {
int pas = (1 << 16);
int r = 0;
int sum = 0;
while (pas) {
if (pas + r <= N && sum + v[pas + r] <= x) {
r += pas;
sum += v[r];
}
pas >>= 1;
}
if (sum == x) { return r; }
return -1;
}
};
int main([[maybe_unused]]int argc, [[maybe_unused]]char** argv) {
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
aib bittree;
std::cin >> N;
int M = 0;
std::cin >> M;
for (auto i = 1; i <= N; i++) {
int foo;
std::cin >> foo;
bittree.add(i, foo);
}
for (auto i = 0; i < M; i++) {
int op;
std::cin >> op;
switch (op) {
case op::ADD:
{
int p;
int x;
std::cin >> p >> x;
bittree.add(p, x);
}
break;
case op::SUM:
{
int x;
int y;
std::cin >> x >> y;
int sum = bittree.sum(y) - bittree.sum(x - 1);
printf("%i\n", sum);
fflush(stdout);
}
break;
case op::SHIT:
{
int x;
std::cin >> x;
printf("%i\n", bittree.thatOneShittyFunction(x));
fflush(stdout);
}
break;
default:
std::terminate();
}
}
return 0;
}