#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
struct Node
{
int a,h;
}nd[N];
int dp[N];
bool cmp(Node a,Node b)
{
return a.a>b.a;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,h,a;
cin>>n>>h>>a;
for(int i=1;i<=n;i++)
{
cin>>nd[i].h;
}
for(int i=1;i<=n;i++)
{
cin>>nd[i].a;
}
sort(nd+1,nd+1+n,cmp);
int l = 1;
for(int i=1;i<=n;i++)
{
if(nd[i].a>=a||nd[i].h>=h)l=i+1;
else break;
}
dp[l] = 1;
int ans = 0;
if(l<=n)ans=1;
for(int i=l+1;i<=n;i++)
{
if(nd[i].h<h)dp[i]=1;
else continue;
for(int j=l;j<i;j++)
{
if(nd[j].h>nd[i].h)
{
dp[i] = max(dp[i],dp[j]+1);
}
}
ans = max(ans,dp[i]);
}
cout<<ans<<'\n';
return 0;
}
挺典的一道题,转换成求最长下降子序列的问题就好解决了

京公网安备 11010502036488号