| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1290608 | monaxia | 비밀 (JOI14_secret) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define pb push_back
#define ppb pop_back
#define fr first
#define sc second
#define all(v) v.begin(), v.end()
#define vektor vector
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
constexpr ull Mod = (119 << 23) | 1;
constexpr ull sqr = 223;
constexpr ld eps = 1e-9;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll random_ll(ll l, ll r) {if (l > r) return -1; return uniform_int_distribution<ll>(l, r)(rng);}
#include "secret.h"
int tre[25][1005], mask[1005];
int n;
int a[1001];
void inittt(int l, int r, int layer){
if(l == r){
tre[layer][l] = a[l];
return;
}
int mid = (l + r) >> 1;
tre[layer][mid] = a[mid];
tre[layer][mid + 1] = a[mid + 1];
for(int i = mid - 1; i >= l; i --){
tre[layer][i] = Secret(a[i], tre[layer][i + 1]);
}
for(int i = mid + 2; i <= r; i ++){
tre[layer][i] = Secret(tre[layer][i - 1], a[i]);
}
inittt(l, mid, layer + 1);
inittt(mid + 1, r, layer + 1);
}
void Init(int N, int A[]){
memset(tre, 0, sizeof(tre));
memset(mask, 0, sizeof(mask));
n = N;
for(int i = 1; i <= n; i ++) a[i] = A[i - 1];
inittt(1, n, 1);
}
int Query(int l, int r){
l ++;
r ++;
int u = 1, v = n, layer = 1;
while(u != v){
int mid = (l + r) >> 1;
if(l <= mid && mid <= r) return Secret(tre[layer][l], tree[layer][r]);
if(mid < l) u = mid + 1;
else v = mid - 1;
}
return a[l];
}
