#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp[1<<17], mn[1<<17];
int main(){
int n, m, ans = 0;
cin>>n>>m;
vector<pair<int,int>> vec(n);
vector<int> c(m);
for (int i=0;i<n;i++)
cin>>vec[i].second>>vec[i].first;
sort(begin(vec), end(vec));
for (int i=0;i<m;i++)
cin>>c[i];
sort(begin(c), end(c));
for (int i=1;i<=n;i++)
dp[i] = 2e9, mn[i] = m;
mn[0] = -1;
for (auto [b, a] : vec){
int k = upper_bound(begin(c), end(c), a - 1) - begin(c);
int u = upper_bound(dp, dp + n + 1, a) - dp;
if (k == m or mn[u-1] >= m-1)
continue;
dp[u] = a;
mn[u] = max(mn[u-1] + 1, k);
ans = max(ans, u);
}
cout<<ans<<'\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |