Submission #1162564

#TimeUsernameProblemLanguageResultExecution timeMemory
1162564abysmalExhibition (JOI19_ho_t2)C++20
0 / 100
0 ms324 KiB
#include<algorithm> #include<complex> #include<iostream> #include<map> #include<queue> #include<set> #include<stdint.h> #include<vector> #ifdef LOCAL #include "dbg.h" #else #define dbg(...) #endif using namespace std; const int64_t INF = (int64_t) 1e18 + 777; const int64_t mINF = (int64_t) 1e9 + 777; const int64_t MOD = (int64_t) 1e9 + 7; struct Picture { int s; int v; Picture(int s_, int v_) : s(s_), v(v_) {} bool operator < (const Picture& o) { return v < o.v; } }; struct Solution { vector<int> bit; Solution() {} void solve() { int n; int m; cin >> n >> m; vector<Picture> pic; vector<int> c(m); for(int i = 0; i < n; i++) { int s; int v; cin >> s >> v; pic.emplace_back(s, v); } for(int i = 0; i < m; i++) { cin >> c[i]; } bit.resize(m + 1, 0); vector<bool> taken(m, false); sort(c.begin(), c.end()); sort(pic.begin(), pic.end()); int ans = 0; for(int i = 0; i < n; i++) { int s = pic[i].s; int l = 0; int r = m - 1; int x = -1; while(l <= r) { int mid = l + (r - l) / 2; if(c[mid] >= s) { x = mid; if(taken[mid]) l = mid + 1; else r = mid - 1; } else l = mid + 1; } if(x == -1) continue; taken[x] = true; int dp = get(x); ans = max(ans, dp + 1); update(x + 1, dp + 1); } cout << ans << "\n"; } int get(int i) { int res = 0; while(i > 0) { res = max(res, bit[i]); i -= i & (-i); } return res; } void update(int i, int val) { while(i < (int) bit.size()) { bit[i] = max(bit[i], val); i += i & (-i); } } int modadd(int a, int b) { int res = a + b; if(res >= MOD) res -= MOD; return res; } int modmul(int a, int b) { return (1LL * a * b) % MOD; } }; int main() { int t = 1; //cin >> t; for(int i = 0; i < t; i++) { Solution().solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...