Submission #1254687

#TimeUsernameProblemLanguageResultExecution timeMemory
1254687mngoc._.Pilot (NOI19_pilot)C++20
100 / 100
993 ms86620 KiB
#include<bits/stdc++.h> #define int long long #define pii pair<int , int> using namespace std; const int N = 1e6 + 1; pii h[N]; vector<int> adj[N]; vector<pii> queries; int n , q; bool check[N]; long long ans[N]; long long res = 0; struct DSU{ long long sz[N]; int par[N]; void init(void){ for(int i = 1 ; i <= n ; i++){ sz[i] = 1; par[i] = i; } } int find(int u){ if(u == par[u]) return u; return par[u] = find(par[u]); } void joinset(int u , int v){ u = find(u); v = find(v); if(u == v) return; if(sz[u] < sz[v]) swap(u , v); res -= ((sz[u] + 1) * sz[u] / 2 + (sz[v] + 1) * (sz[v]) / 2); sz[u] += sz[v]; par[v] = u; res += (sz[u] + 1) * sz[u] / 2; } } dsu; void solve(void){ cin >> n >> q; for(int i = 1; i <= n ; i++){ cin >> h[i].first; h[i].second = i; } for(int i = 1 ; i <= q ; i++){ int w; cin >> w; queries.push_back(make_pair(w, i)); } sort(h + 1 , h + n + 1); sort(queries.begin() , queries.end()); dsu.init(); for(int i = 1 ; i <= n ; i++) check[i] = false; int kquynh = 1; for(int i = 0 ; i <= q - 1; i++){ while(kquynh <= n && h[kquynh].first <= queries[i].first){ int u = h[kquynh].second; if (!check[u]) { check[u] = true; res += 1; } if (u > 1 && check[u-1]) dsu.joinset(u, u-1); if (u < n && check[u+1]) dsu.joinset(u, u+1); kquynh++; } ans[queries[i].second] = res; } for(int i = 1 ; i <= q ; i++) cout << ans[i] << endl; } signed main(void){ ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); solve(); return 0; }
#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...