#include "secret.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define endl "\n"
using namespace std;
using namespace __gnu_pbds;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T, typename key = less_equal<T>>
using ordered_set = tree<T, null_type, key, rb_tree_tag, tree_order_statistics_node_update>;
const ll N = 1005, lg = 11;
ll st[lg][N], a[N], n;
void build(ll l, ll r, ll d)
{
if (l == r)
{
st[d][l] = a[l];
return;
}
ll mid = (l + r) >> 1;
st[d][mid] = a[mid];
st[d][mid + 1] = a[mid + 1];
for (ll i = mid + 2; i <= r; i++) st[d][i] = Secret(st[d][i - 1], a[i]);
for (ll i = mid - 1; i >= l; i--) st[d][i] = Secret(a[i], st[d][i + 1]);
build(l, mid, d + 1);
build(mid + 1, r, d + 1);
}
ll query(ll l, ll r, ll d, ll lx, ll rx)
{
if (!(lx <= l and r <= rx)) return -1;
ll mid = (lx + rx) >> 1;
if (l == mid + 1) return st[d][r];
if (r == mid) return st[d][l];
if (l <= mid and mid <= r) return Secret(st[d][l], st[d][r]);
ll tmp = query(l, r, d + 1, lx, mid);
if (tmp != -1) return tmp;
tmp = query(l, r, d + 1, mid + 1, rx);
if (tmp != -1) return tmp;
}
void Init(int N, int A[])
{
n = N;
for (ll i = 0; i < n; i++) a[i] = A[i];
build(0, n - 1, 0);
}
int Query(int l, int r)
{
return l == r ? a[l] : query(l, r, 0, 0, n - 1);
}
Compilation message (stderr)
secret.cpp: In function 'long long int query(long long int, long long int, long long int, long long int, long long int)':
secret.cpp:42:1: warning: control reaches end of non-void function [-Wreturn-type]
42 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |