제출 #332997

#제출 시각아이디문제언어결과실행 시간메모리
332997guka415Pilot (NOI19_pilot)C++14
100 / 100
705 ms63980 KiB
#define fast ios::sync_with_stdio(false); cin.tie(0) #define foru(i, k, n) for (int i = k; i < n; i++) #define ford(i, k, n) for (int i = k; i >= n; i--) #define pb push_back #define mp make_pair #include <iostream> #include <vector> #include <algorithm> #include <string> #include <bitset> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int sz = 1e6 + 5; struct dsu { int f[sz], p[sz], rk[sz]; dsu(int n) { foru(i, 0, n) { f[i] = i; p[i] = 1; rk[i] = 1; } } int father(int src) { if (f[src] != src)return f[src] = father(f[src]); else return src; } bool unite(int a, int b) { int fa = father(a), fb = father(b); if (fa == fb)return 0; if (rk[fa] < rk[fb])swap(fa, fb); rk[fa] = max(rk[fa], rk[fb] + 1); f[fb] = fa; p[fa] += p[fb]; return 1; } }; int n, q; ll h[sz]; pii g[sz]; pii qu[sz]; ll ans[sz]; bitset<sz> on; void input() { cin >> n >> q; foru(i, 0, n) { cin >> h[i]; g[i].first = h[i]; g[i].second = i; } foru(i, 0, q) { cin >> qu[i].first; qu[i].second = i; } sort(qu, qu + q); sort(g, g + n); } ll calc(ll x) { return (x * (x + 1)) / 2; } int main() { fast; input(); dsu d(n); ll ret = 0; int ind = 0; foru(i, 0, q) { while (ind < n && h[g[ind].second] <= qu[i].first) { int px = g[ind].second; on[px] = 1; if (px && on[px - 1]) { ret -= calc(d.p[d.father(px - 1)]); d.unite(px, px - 1); } if (px != n - 1 && on[px + 1]) { ret -= calc(d.p[d.father(px + 1)]); d.unite(px, px + 1); } ret += calc(d.p[d.father(px)]); ind++; } ans[qu[i].second] = ret; } foru(i, 0, q)cout << ans[i] << '\n'; 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...