//
// main.cpp
// EliteCamp 2025
//
// Created by Ali AlSalman on 14/11/2025.
//
#include <bits/stdc++.h>
//#define INTERACTIVE
//#define TESTCASES
//#define SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__
template<typename T>
using vec = std::vector<T>;
using namespace std;
int Secret(int x, int y);
struct segtree {
struct node {
int sum;
static node merge(const node& lhs, const node& rhs) {
return { Secret(lhs.sum, rhs.sum) };
}
};
vec<optional<node>> _data;
int _offset;
segtree() {}
segtree(int n, int a[]) {
if (__builtin_popcount(n) == 1) _offset = n;
else _offset = (1<<(32 - __builtin_clz(n)));
_data.resize(2 * _offset);
for (int i = 0; i < n; i++)
_data[i + _offset] = { a[i] };
for (int i = _offset - 1; i; i--)
_data[i] = node::merge(_data[2 * i].value(), _data[2 * i + 1].value());
}
optional<node> _query(int v, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) return _data[v];
else if (r <= ql || qr <= l) return nullopt;
else {
int mid = (l + r) / 2;
auto lhs = _query(2 * v, l, mid, ql, qr);
auto rhs = _query(2 * v + 1, mid, r, ql, qr);
if (!lhs.has_value()) return rhs;
if (!rhs.has_value()) return lhs;
return node::merge(lhs.value(), rhs.value());
}
}
void set(int i, node n) {
i += _offset;
_data[i] = n;
for (i /= 2; i; i /= 2)
_data[i] = node::merge(_data[2 * i].value(), _data[2 * i + 1].value());
}
node query(int l, int r) {
l += _offset; r += _offset;
return _query(1, _offset, 2 * _offset, l, r).value();
}
};
segtree st;
void Init(int n, int a[]) {
st = segtree(n, a);
}
int Query(int l, int r) {
r++;
return st.query(l, r).sum;
}
//int main() {
//#ifndef INTERACTIVE
// ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
//#endif
//
// int t = 1;
//#ifdef TESTCASES
// cin>>t;
//#endif
//
// for (int i = t; i--;) {
//#if defined(TESTCASES) && defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
// cout<<"Case "<<t-i<<":\n";
//#elif defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//#warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
//#endif
// solve();
// }
// return 0;
//}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |