Pagini recente » Cod sursa (job #1871848) | Cod sursa (job #1027561) | Cod sursa (job #2347095) | Cod sursa (job #2405935) | Cod sursa (job #2857960)
#include <bits/stdc++.h>
#define SZ 100001
using namespace std;
int N;
ifstream fin("aib.in");
ofstream fout("aib.out");
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) {
aib bittree;
fin >> N;
int M = 0;
fin >> M;
for (auto i = 1; i <= N; i++) {
int foo;
fin >> foo;
bittree.add(i, foo);
}
for (auto i = 0; i < M; i++) {
int op;
fin >> op;
switch (op) {
case op::ADD:
{
int p;
int x;
fin >> p >> x;
bittree.add(p, x);
}
break;
case op::SUM:
{
int x;
int y;
fin >> x >> y;
int sum = bittree.sum(y) - bittree.sum(x - 1);
fout << sum << '\n';
fflush(stdout);
}
break;
case op::SHIT:
{
int x;
fin >> x;
fout << bittree.thatOneShittyFunction(x) << '\n';
}
break;
default:
terminate();
}
}
return 0;
}