Submission #318570

#TimeUsernameProblemLanguageResultExecution timeMemory
318570ryangohcaPilot (NOI19_pilot)C++17
100 / 100
709 ms61364 KiB
#include <bits/stdc++.h> #define int long long #define pii pair<int, int> using namespace std; vector<pii> heights; int g[1000005], sz[1000005], ans[1000005]; bool vis[1000005]; int curr = 0; int find_set(int n){ if (g[n] == n) return n; else return (g[n] = find_set(g[n])); } bool is_same_set(int a, int b){ return find_set(a) == find_set(b); } void merge_set(int a, int b){ int pa = find_set(a), pb = find_set(b); curr -= sz[pa] * (sz[pa] + 1) / 2; curr -= sz[pb] * (sz[pb] + 1) / 2; sz[pb] += sz[pa]; g[pa] = pb; curr += sz[pb] * (sz[pb] + 1) / 2; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); for (int i = 0; i < 1000005; i++){ g[i] = i; sz[i] = 1; ans[i] = -1; } int n, q; cin >> n >> q; for (int i = 0; i < n; i++){ int h; cin >> h; heights.push_back({h, i}); } sort(heights.begin(), heights.end()); int prevh = 1; for (int i = 0; i < n; i++){ auto [h, idx] = heights[i]; for (int j = prevh; j < h; j++) ans[j] = curr; vis[idx] = 1; prevh = h; curr++; if (idx != 0 && vis[idx - 1]) merge_set(idx, idx - 1); if (idx != n - 1 && vis[idx + 1]) merge_set(idx, idx + 1); ans[h] = curr; } for (int i = 0; i < q; i++){ int qi; cin >> qi; cout << ((ans[qi] == -1) ? curr: ans[qi]) << '\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...