Submission #321153

#TimeUsernameProblemLanguageResultExecution timeMemory
321153sochoPilot (NOI19_pilot)C++14
100 / 100
700 ms76584 KiB
#include "bits/stdc++.h" using namespace std; long long ans = 0; const long long MXN = 1000005; long long par[MXN], gs[MXN]; bool used[MXN]; void init() { for (long long i=0; i<MXN; i++) par[i] = i; } long long parent(long long n) { if (n == par[n]) return n; return par[n] = parent(par[n]); } bool arc(long long a, long long b) { return parent(a) == parent(b); } long long pa(long long n) { return n * (n+1) / 2; } void connect(long long a, long long b) { if (arc(a, b)) return; long long ax = parent(a); long long bx = parent(b); long long oa = gs[ax]; long long ob = gs[bx]; ans -= pa(oa); ans -= pa(ob); ans += pa(oa+ob); gs[ax] += gs[bx]; par[bx] = ax; } void prop(long long n) { if (used[n-1] && used[n]) { connect(n-1, n); } if (used[n] && used[n+1]) { connect(n, n+1); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n, q; cin >> n >> q; vector<pair<long long, long long> > ar(n); for (long long i=0; i<n; i++) { long long x; cin >> x; ar[i] = make_pair(x, i+1); } vector<pair<long long, long long> > qs; for (long long i=0; i<q; i++) { long long x; cin >> x; qs.push_back(make_pair(x, i)); } memset(used, 0, sizeof used); sort(ar.begin(), ar.end()); sort(qs.begin(), qs.end()); long long nxt = 0; long long res[q]; init(); for (long long i=0; i<q; i++) { long long qx = qs[i].first; long long pos = qs[i].second; while (nxt < n && ar[nxt].first <= qx) { ans++; used[ar[nxt].second] = true; gs[ar[nxt].second] = 1; prop(ar[nxt].second); nxt++; } res[pos] = ans; } for (long long i=0; 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...