제출 #1277586

#제출 시각아이디문제언어결과실행 시간메모리
1277586nanaseyuzukiPilot (NOI19_pilot)C++20
100 / 100
421 ms77732 KiB
#include <bits/stdc++.h> // Author: Kazuki_Will_Win_VOI_8703 #define fi first #define se second #define pii pair<int, int> #define int long long using namespace std; const int mn = 1e6 + 5, inf = 1e9; int n, q, h[mn], on[mn], res = 0; int ans[mn]; pii qr[mn]; int par[mn], sz[mn]; int find(int u){ while(u != par[u]) u = par[u] = par[par[u]]; return u; } void join(int u, int v){ u = find(u), v = find(v); if(u == v) return; if(sz[u] < sz[v]) swap(u, v); res += 1ll * sz[v] * sz[u]; par[v] = u, sz[u] += sz[v]; } void solve(){ cin >> n >> q; for(int i = 1; i <= n; i++) cin >> h[i], par[i] = i, sz[i] = 1; vector <pii> reina; for(int i = 1; i <= n; i++) reina.push_back({h[i], i}); sort(reina.begin(), reina.end()); int ptr = 0; for(int i = 1; i <= q; i++){ cin >> qr[i].fi; qr[i].se = i; } sort(qr + 1, qr + q + 1); for(int i = 1; i <= q; i++){ while(ptr < n && reina[ptr].fi <= qr[i].fi){ int pos = reina[ptr].se; res ++; if(on[pos - 1]) join(pos, pos - 1); if(on[pos + 1]) join(pos, pos + 1); on[pos] = 1; ptr ++; } ans[qr[i].se] = res; } for(int i = 1; i <= q; i++) cout << ans[i] << '\n'; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t = 1; // cin >> t; while(t--){ solve(); } }
#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...