Submission #1014841

#TimeUsernameProblemLanguageResultExecution timeMemory
1014841aufanExhibition (JOI19_ho_t2)C++17
0 / 100
1 ms348 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second using namespace std; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<int> s(n), v(n), b; for (int i = 0; i < n; i++) { cin >> s[i] >> v[i]; b.push_back(v[i]); } sort(b.begin(), b.end()); b.erase(unique(b.begin(), b.end()), b.end()); vector<int> c(m); for (int i = 0; i < m; i++) cin >> c[i]; sort(c.begin(), c.end()); vector<int> ord(n); iota(ord.begin(), ord.end(), 0); sort(ord.begin(), ord.end(), [&](int x, int y) { if (s[x] == s[y]) return s[x] > s[y]; return s[x] > s[y]; }); int k = (int)b.size(); vector<int> fen(k + 1); auto get = [&](int x) { return lower_bound(b.begin(), b.end(), x) - b.begin(); }; auto upd = [&](int x, int val) { for (; x <= k; x += x & -x) fen[x] = max(fen[x], val); }; auto qry = [&](int x) { int res = 0; for (; x > 0; x -= x & -x) res = max(res, fen[x]); return res; }; int ans = 0; for (auto i : ord) { int lf = 0, rg = m - 1, pos = m; while (lf <= rg) { int md = (lf + rg) / 2; if (s[i] <= c[md]) { pos = md; rg = md - 1; } else { lf = md + 1; } } int res = min(m - pos - 1, qry(k - get(v[i]))) + 1; ans = max(ans, res); upd(k - get(v[i]), res); } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...