| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1292284 | AliMark71 | 비밀 (JOI14_secret) | C++20 | 0 ms | 0 KiB |
//
// 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--) {
auto lhs = _data[2 * i];
auto rhs = _data[2 * i + 1];
if (!lhs.has_value()) return rhs;
if (!rhs.has_value()) return lhs;
_data[i] = node::merge(lhs.value(), rhs.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) {
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;
//}
