Submission #584825

#TimeUsernameProblemLanguageResultExecution timeMemory
584825HanksburgerFortune Telling 2 (JOI14_fortune_telling2)C++17
100 / 100
1197 ms85288 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int a[200005], b[200005], t[200005]; vector<int> s[800005]; map<int, int> mp; void f(int i, int l, int r) { sort(s[i].begin(), s[i].end()); if (l<r) { int mid=(l+r)/2; f(i*2, l, mid); f(i*2+1, mid+1, r); } } void upd(int i, int l, int r, int q, int x) { s[i].push_back(x); if (l<r) { int mid=(l+r)/2; if (l<=q && q<=mid) upd(i*2, l, mid, q, x); else upd(i*2+1, mid+1, r, q, x); } } int queMax(int i, int l, int r, int ql, int qr) { if (ql<=l && r<qr) { if (s[i].empty()) return 0; return s[i][s[i].size()-1]; } int mid=(l+r)/2, res=0; if (ql<=mid && l<qr) res=max(res, queMax(i*2, l, mid, ql, qr)); if (ql<=r && mid+1<qr) res=max(res, queMax(i*2+1, mid+1, r, ql, qr)); return res; } int queCnt(int i, int l, int r, int q, int x) { if (q<=l) { int ind=upper_bound(s[i].begin(), s[i].end(), x)-s[i].begin(); return s[i].size()-ind; } int mid=(l+r)/2, res=0; if (q<=mid) res+=queCnt(i*2, l, mid, q, x); if (q<=r) res+=queCnt(i*2+1, mid+1, r, q, x); return res; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q, sz=0, ans=0; cin >> n >> q; for (int i=1; i<=n; i++) cin >> a[i] >> b[i]; for (int i=1; i<=q; i++) { cin >> t[i]; mp[t[i]]=1; } for (auto itr=mp.begin(); itr!=mp.end(); itr++) { sz++; itr->second=sz; } for (int i=1; i<=q; i++) upd(1, 1, sz, mp[t[i]], i); f(1, 1, sz); for (int i=1; i<=n; i++) { auto itr1=mp.lower_bound(a[i]), itr2=mp.lower_bound(b[i]); int x=(itr1==mp.end()?1e9:itr1->second), y=(itr2==mp.end()?1e9:itr2->second); if (x>y) swap(x, y); int res1=queMax(1, 1, sz, x, y); int res2=queCnt(1, 1, sz, y, res1); if (!res1) { if (res2&1) ans+=b[i]; else ans+=a[i]; } else { if (res2&1) ans+=min(a[i], b[i]); else ans+=max(a[i], b[i]); } } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...