제출 #1202425

#제출 시각아이디문제언어결과실행 시간메모리
1202425woohyun_jngSushi (JOI16_sushi)C++20
100 / 100
5861 ms70380 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 400001; const int BUCKET = 700; int N, X[MAX]; priority_queue<int> pq[BUCKET], inp[BUCKET]; void pq_update(int x) { while (!pq[x].empty()) pq[x].pop(); for (int i = x * BUCKET; i < min((x + 1) * BUCKET, N); i++) pq[x].push(X[i]); } void update(int x) { for (int i = x * BUCKET; i < min((x + 1) * BUCKET, N); i++) inp[x].push(-X[i]), X[i] = -inp[x].top(), inp[x].pop(); while (!inp[x].empty()) inp[x].pop(); } int swp(int l, int r, int x) { for (int i = l; i <= r; i++) if (X[i] > x) swap(X[i], x); return x; } int query(int l, int r, int x) { if (l / BUCKET == r / BUCKET) update(l / BUCKET), x = swp(l, r, x), pq_update(l / BUCKET); else { update(l / BUCKET), x = swp(l, (l / BUCKET + 1) * BUCKET - 1, x), pq_update(l / BUCKET); for (int i = l / BUCKET + 1; i < r / BUCKET; i++) inp[i].push(-x), pq[i].push(x), x = pq[i].top(), pq[i].pop(); update(r / BUCKET), x = swp(r / BUCKET * BUCKET, r, x), pq_update(r / BUCKET); } return x; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int Q, S, T, P; cin >> N >> Q; for (int i = 0; i < N; i++) cin >> X[i], pq[i / BUCKET].push(X[i]); while (Q--) { cin >> S >> T >> P, S--, T--; if (S <= T) P = query(S, T, P); else P = query(0, T, query(S, N - 1, P)); cout << P << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...