Submission #744619

#TimeUsernameProblemLanguageResultExecution timeMemory
744619tch1cherinAbracadabra (CEOI22_abracadabra)C++17
100 / 100
604 ms48124 KiB
#include <bits/stdc++.h> using namespace std; struct fenwick { int size, logn; vector<int> fenw; fenwick(int n) : size(n), logn(__lg(n)), fenw(n + 1) {} void add(int i, int v) { for (i++; i <= size; i += i & -i) { fenw[i] += v; } } int query(int r) { int ans = 0; for (; r > 0; r -= r & -r) { ans += fenw[r]; } return ans; } int lower_bound(int s) { int pos = 0; for (int delta = 1 << logn; delta > 0; delta /= 2) { if (pos + delta <= size && fenw[pos + delta] < s) { pos += delta; s -= fenw[pos]; } } return pos; } }; void solve() { int n, q; cin >> n >> q; vector<int> a(n); for (int &v : a) { cin >> v; v--; } int X = n; vector<vector<pair<int, int>>> queries(X); for (int i = 0; i < q; i++) { int t, p; cin >> t >> p; p--, t = min(t, X - 1); queries[t].emplace_back(i, p); } vector<int> nxt(n); stack<int> st; for (int i = n - 1; i >= 0; i--) { while (!st.empty() && a[st.top()] < a[i]) { st.pop(); } nxt[i] = st.empty() ? n : st.top(); st.push(i); } vector<int> answer(q); for (auto [i, p] : queries[0]) { answer[i] = a[p]; } fenwick fenw(n); vector<int> l(n), r(n); int pos = 0; while (pos != n) { int go = nxt[pos]; if (pos < n / 2 && go > n / 2) { go = n / 2; } l[a[pos]] = pos; r[a[pos]] = go; fenw.add(a[pos], go - pos); pos = go; } for (int t = 1; t < X; t++) { for (auto [i, p] : queries[t]) { int j = fenw.lower_bound(p + 1); int sum = fenw.query(j + 1); answer[i] = a[r[j] - (sum - p)]; } int j = fenw.lower_bound(n / 2); int sum = fenw.query(j + 1); if (sum != 0) { int first = r[j] - (sum - n / 2), right = r[j]; fenw.add(j, first - r[j]); r[j] = first; while (first != right) { int go = min(right, nxt[first]); l[a[first]] = first; r[a[first]] = go; fenw.add(a[first], go - first); first = go; } } } for (int v : answer) { cout << 1 + v << "\n"; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...