Submission #674739

#TimeUsernameProblemLanguageResultExecution timeMemory
674739QwertyPiPilot (NOI19_pilot)C++14
100 / 100
551 ms83224 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second const int MAXN = 1e6 + 11; using namespace std; int rans = 0; struct DSU{ int dsu[MAXN], sz[MAXN]; void __init(int n){ for(int i = 0; i <= n; i++){ dsu[i] = i, sz[i] = 1; } } int f(int x){ return x == dsu[x] ? x : dsu[x] = f(dsu[x]); } int s(int x){ return sz[f(x)]; } void g(int x, int y){ x = f(x), y = f(y); if(x != y){ rans += sz[x] * sz[y]; dsu[x] = y; sz[y] += sz[x]; } } } dsu; int h[MAXN], ans[MAXN]; int32_t main(){ cin.tie(0); cout.tie(0)->sync_with_stdio(false); int n, q; cin >> n >> q; for(int i = 0; i < n; i++){ cin >> h[i]; } dsu.__init(n); vector<pair<int, int>> Q, pos; for(int i = 0; i < q; i++){ int y; cin >> y; Q.push_back({y, i}); } sort(Q.begin(), Q.end()); for(int i = 0; i < n; i++){ pos.push_back({h[i], i}); } sort(pos.begin(), pos.end()); int pid = 0; for(auto i : Q){ while(pid < n && pos[pid].fi <= i.fi) dsu.g(pos[pid].se, pos[pid].se + 1), pid++; ans[i.se] = rans; } for(int i = 0; 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...