Submission #894914

#TimeUsernameProblemLanguageResultExecution timeMemory
894914votranngocvyPilot (NOI19_pilot)C++14
18 / 100
26 ms11612 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second #define mp make_pair const int N = 1e6 + 5; pii a[N]; int b[N],par[N],sz[N],ans; bool f[N]; void make_set(int v) { par[v] = v; sz[v] = 1; } int find_set(int v) { if (v == par[v]) return v; int p = find_set(par[v]); par[v] = p; return p; } void union_sets(int a,int b) { a = find_set(a),b = find_set(b); if (a == b) return; ans -= sz[a] * (sz[a] - 1) / 2 + sz[b] * (sz[b] - 1) / 2; if (sz[a] < sz[b]) swap(a,b); sz[a] += sz[b]; par[b] = a; ans += sz[a] * (sz[a] - 1) / 2; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,q; cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> a[i].fi; a[i].se = i; } sort(a + 1,a + n + 1); for (int i = 1; i <= q; i++) cin >> b[i]; sort(b + 1,b + q + 1); int j = 1; for (int i = 1; i <= n; i++) make_set(i); for (int i = 1; i <= q; i++) { while (j <= n && a[j].fi <= b[i]) { ans++; if (a[j].se > 1 && f[a[j].se - 1]) union_sets(a[j].se,a[j].se - 1); if (a[j].se < n && f[a[j].se + 1]) union_sets(a[j].se,a[j].se + 1); f[a[j].se] = true; j++; } cout << ans << "\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...