제출 #1267272

#제출 시각아이디문제언어결과실행 시간메모리
1267272nguyenvietanhPilot (NOI19_pilot)C++20
100 / 100
399 ms69896 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pii pair<int,int> #define inp(name) freopen(name, "r", stdin); #define out(name) freopen(name, "w", stdout); const int N = 1e6 + 5; const int mod = 998244353; int n, q, ans = 0; pii h[N], x[N]; int par[N], sz[N], res[N], ok[N]; int find(int u){ if (par[u] == u) return u; return par[u] = find(par[u]); } void add(int u, int v){ u = find(u), v = find(v); if (u == v) return; par[u] = v; ans -= (sz[u] + 1) * sz[u]/2; ans -= (sz[v] + 1) * sz[v]/2; sz[v] += sz[u]; ans += (sz[v] + 1) * sz[v]/2; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1; i <= n; i ++){ cin >> h[i].fi; h[i].se = i; par[i] = i; sz[i] = 1; } for (int i = 1; i <= q; i ++){ cin >> x[i].fi; x[i].se = i; } sort(h + 1, h + n + 1); sort(x + 1, x + q + 1); int j = 1; for (int i = 1; i <= q; i ++){ while (j <= n && h[j].fi <= x[i].fi){ ans += 1; if (ok[h[j].se - 1]) add(h[j].se - 1, h[j].se); if (ok[h[j].se + 1]) add(h[j].se + 1, h[j].se); ok[h[j].se] = 1; j ++; } res[x[i].se] = ans; } for (int i = 1; i <= q; i ++) cout << res[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...