제출 #1316488

#제출 시각아이디문제언어결과실행 시간메모리
1316488khanhphucscratchExhibition (JOI19_ho_t2)C++20
0 / 100
0 ms332 KiB
#include<bits/stdc++.h> using namespace std; int st[400020]; void update(int node, int l, int r, int p, int v) { if(l > p || r < p) return; if(l == p && r == p) st[node] = max(st[node], v); else{ update(node*2, l, (l+r)/2, p, v); update(node*2+1, (l+r)/2+1, r, p, v); st[node] = max(st[node*2], st[node*2+1]); } } int query(int node, int l, int r, int tl, int tr) { if(l > tr || r < tl) return 0; if(l >= tl && r <= tr) return st[node]; else return max(query(node*2, l, (l+r)/2, tl, tr), query(node*2+1, (l+r)/2+1, r, tl, tr)); } pair<int, int> a[100005]; int b[100005], c[100005], dp[100005]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin>>n>>m; for(int i = 1; i <= n; i++){ cin>>a[i].first>>a[i].second; swap(a[i].first, a[i].second); } for(int i = 1; i <= m; i++) cin>>c[i]; for(int i = 1; i <= n; i++){ a[i].second *= -1; c[i] *= -1; a[i].first *= -1; } sort(a+1, a+n+1); sort(c+1, c+m+1); vector<int> vec; for(int i = 1; i <= n; i++) vec.push_back(a[i].second); sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end()); for(int i = 1; i <= n; i++) b[i] = upper_bound(vec.begin(), vec.end(), a[i].second) - vec.begin(); int ans = 0; for(int i = 1; i <= n; i++){ int p1 = upper_bound(c+1, c+m+1, a[i].second) - c - 1; int p2 = query(1, 1, n, 1, b[i])+1; dp[i] = min(p1, p2); ans = max(ans, dp[i]); update(1, 1, n, b[i], dp[i]); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...