Submission #1123807

#TimeUsernameProblemLanguageResultExecution timeMemory
1123807HiepVu217Pilot (NOI19_pilot)C++20
100 / 100
498 ms47572 KiB
#include <bits/stdc++.h> #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") using namespace std; const int N = 1e6 + 17; int n, q, l[N], r[N]; bool ex[N]; long long res, ans[N]; struct qrs { int a, t, id; bool operator < (const qrs &o) const { if (a != o.a) { return a < o.a; } return t < o.t; } } qr[2 * N]; inline int rootl (int u) { if (u == l[u]) { return u; } return l[u] = rootl(l[u]); } inline void joinl (int u, int v) { u = rootl(u), v = rootl(v); if (u == v) { return; } if (u > v) { swap (u, v); } l[v] = u; } inline int rootr (int u) { if (u == r[u]) { return u; } return r[u] = rootr(r[u]); } inline void joinr (int u, int v) { u = rootr(u), v = rootr(v); if (u == v) { return; } if (u < v) { swap (u, v); } r[v] = u; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1, x; i <= n; ++i) { cin >> x; qr[i] = {x, 0, i}; l[i] = r[i] = i; } for (int i = 1, x; i <= q; ++i) { cin >> x; qr[n + i] = {x, 1, i}; } sort (qr + 1, qr + n + q + 1); for (int i = 1; i <= n + q; ++i) { auto [a, t, id] = qr[i]; if (t) { ans[id] = res; continue; } ex[id] = 1; res += (id > 1 && ex[id - 1]) * (id - rootl (id - 1)) + (id < n && ex[id + 1]) * (rootr (id + 1) - id) + 1; res += 1LL * (id > 1 && ex[id - 1]) * (id - rootl (id - 1)) * (id < n && ex[id + 1]) * (rootr (id + 1) - id); if (id > 1 && ex[id - 1]) { joinl (id, id - 1); joinr (id, id - 1); } if (id < n && ex[id + 1]) { joinl (id, id + 1); joinr (id, id + 1); } } for (int i = 1; i <= q; ++i) { cout << ans[i] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...