제출 #1295706

#제출 시각아이디문제언어결과실행 시간메모리
1295706fairkrashExhibition (JOI19_ho_t2)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll INF = 1e18; ll MOD = 1e9 + 7; vector<ll> z; vector<ll> tree; ll sum(ll v, ll vl, ll vr, ll l, ll r) { if (l >= vr || vl >= r) { return 0; } if (l <= vl && r >= vr) { return tree[v]; } ll mid = (vr + vl) / 2; return max(sum(v * 2, vl, mid, l, r), sum(v * 2 + 1, mid, vr, l, r)); } void change(ll v, ll vl, ll vr, ll ind, ll x) { if (vr - vl == 1) { tree[v] = x; return; } ll mid = (vr + vl) / 2; if (ind < mid) { change(v * 2, vl, mid, ind, x); } else { change(v * 2 + 1, mid, vr, ind, x); } tree[v] = max(tree[v * 2], tree[v * 2 + 1]); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); ll n, m; cin >> n >> m; vector<pair<ll, ll>> s(n); z.assign(n, 0); vector<ll> c(m); map<ll, ll> mp; for (ll i = 0; i < n; i++) { cin >> s[i].first >> s[i].second; mp[s[i].second] = 0; } ll d = 0; for (auto to: mp) { mp[to.first] = d; d++; } for (ll i = 0; i < s.size(); i++) { z[i] = mp[s[i].second]; } std::sort(s.begin(), s.end()); for (ll i = 0; i < m; i++) { cin >> c[i]; } sort(c.rbegin(), c.rend()); tree.assign((d + 2) * 4, 0); for (ll i = n - 1; i >= 0; i--) { ll k = sum(1, 0, d + 1, z[i], d + 1); if (c[k] >= s[i].first) { change(1, 0, d + 1, z[i], k + 1); } } cout << tree[1] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...