#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define rep(a,b) for(int a = 0; a < (b); ++a)
#define all(t) t.begin(), t.end()
#define pb push_back
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
const int N = 505, INF = 2e9+54321;
const ll INF_L = (ll)2e18+54321;
int n;
int A[N], B[N], C[N], D[N];
int odl(int l, int p, int val)
{
if(l > p or l >= n) return 0;
int res = 0;
for(int i = l; i <= p; ++i) if(B[i] == val) ++res;
return res;
}
void solve()
{
cin >> n;
rep(i,n) cin >> A[i];
rep(i,n) cin >> B[i];
rep(i,n)
{
if(i == 0) C[i] = 0;
else C[i] = C[i-1];
int idx = -1, mx = -INF;
for(int j = i; j >= 0 and mx <= B[i]; --j)
{
mx = max(mx,A[j]);
//cout << "I: " << i << " J: " << j << " IDX: " << idx << endl;
if(mx == B[i])
{
idx = j;
break;
}
}
//cout << "I: " << i << " IDX: " << idx << endl;
if(idx != -1)
{
map<int,int> M;
int at = -1;
for(int j = idx; j >= 0; --j)
{
if(A[j] > at) M[A[j]] = j;
at = max(at,A[j]);
}
/*cout << endl << endl;
cout << "I: " << i << endl;
for(auto it = M.begin(); it != M.end(); ++it) cout << "VAL: " << it->first << " IDX: " << it->second << endl;
cout << endl << endl; */
for(int j = i; j >= idx; --j)
{
if(auto it = M.find(B[j]) == M.end()) D[j] = -INF;
else
{
D[j] = 1;
for(int k = j+1; k <= i; ++k)
{
if(A[j] >= A[k]) D[j] = max(D[j],D[k]+1);
}
}
}
//cout << endl;
//for(int j = idx; j <= i; ++j) cout << "J: " << j << " D: " << D[j] << endl;
//cout << endl;
for(auto it = M.begin(); it != M.end(); ++it)
{
for(int j = idx; j <= i; ++j)
{
if(it->first >= A[j])
{
int dod = C[it->second];
if(it->second == idx)
{
if(it->second == 0) dod = 0;
else dod = C[it->second-1];
}
int cost = dod+odl(it->second+1,j-1,it->first)+D[j];
C[i] = max(C[i],cost);
}
}
}
}
}
//rep(i,n) cout << "I: " << i << " C: " << C[i] << endl;
cout << C[n-1] << '\n';
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T = 1;
//cin >> T;
while(T--) solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |