#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp[1<<17];
int fun1(){
freopen("input.txt", "r", stdin);
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;
dp[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, k) - dp;
if (dp[u-1] >= m-1 or k == m)
continue;
dp[u] = max(k, dp[u-1] + 1);
ans = max(ans, u);
}
fclose(stdin);
return ans;
}
int fun2(){
// freopen("input.txt", "r", stdin);
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 msk = 1;msk<(1<<n);msk++){
int p = 0;
for (int i=0;i<n;i++){
if (((1<<i) & msk) == 0)
continue;
if (p == m)
p = m + 1;
while (p < m and c[p] < vec[i].second)
p++;
p++;
}
if (p <= m)
ans = max(ans, __builtin_popcount(msk));
}
return ans;
}
int main(){
cout<<fun2()<<'\n';
}
Compilation message (stderr)
joi2019_ho_t2.cpp: In function 'int fun1()':
joi2019_ho_t2.cpp:9:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
9 | freopen("input.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |