Submission #490273

#TimeUsernameProblemLanguageResultExecution timeMemory
490273SirCovidThe19thCake (CEOI14_cake)C++17
0 / 100
533 ms8928 KiB
#include <bits/stdc++.h> using namespace std; template<int sz> struct DS{ int seg[sz * 2]; void upd(int i, int v){ seg[i += sz] = v; for (i /= 2; i; i /= 2) seg[i] = max(seg[i * 2], seg[i * 2 + 1]); } int qry(int l, int r){ int ans = 0; for (l += sz, r += sz; l <= r; r /= 2, l /= 2){ if (l % 2 == 1) ans = max(ans, seg[l++]); if (r % 2 == 0) ans = max(seg[r--], ans); } return ans; } int walk(int v){ int i = 1; while (i < sz) i = (seg[i * 2] < v) ? i * 2 + 1 : i * 2; return i - sz - 1; } }; const int mN = 2.5e5 + 5, mQ = 5e5 + 5; int n, a, q, rnk[11]; pair<int, int> tmp[mN]; DS<(1 << 19)> L, R; int main(){ cin >> n >> a; for (int i = 1; i <= n; i++) cin >> tmp[i].first, tmp[i].second = i; sort(tmp + 1, tmp + n + 1); for (int i = 1; i <= 10; i++) rnk[i] = mQ * (11 - i); //rnk[i] = ith worst(most delicious) one for (int i = 1; i <= n; i++){ int pos = tmp[i].second, r = (n - i + 1 > 0) ? rnk[n - i + 1] : i; if (pos < a) L.upd(a - pos, rnk[i]); if (pos > a) R.upd(pos - a, rnk[i]); } cin >> q; L.upd(a, 1e9); R.upd(n - a + 1, 1e9); while (q--){ int pos; char type; cin >> type >> pos; if (type == 'E'){ int e; cin >> e; if (pos < a) L.upd(a - pos, ++rnk[e]); if (pos > a) R.upd(pos - a, ++rnk[e]); } else{ int ans = pos; if (pos < a) ans = R.walk(L.qry(1, a - pos)) + a; if (pos > a) ans = a - L.walk(R.qry(1, pos - a)); cout<<abs(pos - ans)<<"\n"; } } }

Compilation message (stderr)

cake.cpp: In function 'int main()':
cake.cpp:37:34: warning: unused variable 'r' [-Wunused-variable]
   37 |         int pos = tmp[i].second, r = (n - i + 1 > 0) ? rnk[n - i + 1] : i;
      |                                  ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...