#include <bits/stdc++.h>
using namespace std;
const int c=5005, c2=100005;
int n, a[c2], b[c2];
int maxi[c][c], dp[c][c];
int kov[c2], el[c2], lis[c2], si;
map<int, int> inv;
int main() {
ios_base::sync_with_stdio(false);
cin >> n;
for (int i=1; i<=n; i++) {
cin >> a[i];
}
for (int i=1; i<=n; i++) {
cin >> b[i];
}
if (n<=5000) {
for (int i=1; i<=n; i++) {
maxi[i][i]=a[i];
for (int j=i+1; j<=n; j++) {
maxi[i][j]=max(maxi[i][j-1], a[j]);
maxi[j][i]=maxi[i][j];
}
}
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
dp[i][j]=max(dp[i-1][j], dp[i][j-1]);
if (a[j]==b[i] && maxi[j][i]==a[j]) {
dp[i][j]=max(dp[i][j], dp[i-1][j]+1);
}
}
}
cout << dp[n][n] << "\n";
}
else {
bool kul=1;
for (int i=1; i<=n; i++) {
if (!inv[a[i]]) inv[a[i]]=i;
else kul=0;
}
if (!kul) {
for (int i=1; i<=n; i++) {
if (a[i]==b[i]) {
for (int j=i; j>1; j--) {
if (a[j]>a[j-1]) {
a[j-1]=a[j];
} else {
break;
}
}
if (i<n) a[i+1]=max(a[i], a[i+1]);
}
}
int cnt=0;
for (int i=1; i<=n; i++) {
if (a[i]==b[i]) {
cnt++;
}
}
cout << cnt << "\n";
return 0;
}
vector<int> sor;
sor.push_back(0);
for (int i=1; i<=n; i++) {
while (sor.back()>0 && a[i]>a[sor.back()]) {
kov[sor.back()]=i;
sor.pop_back();
}
el[i]=sor.back();
sor.push_back(i);
}
while (sor.back()>0) {
kov[sor.back()]=n+1;
sor.pop_back();
}
for (int i=1; i<=n; i++) {
int s=inv[b[i]];
if (s && el[s]<i && i<kov[s]) {
int lo=0, hi=si+1, mid;
while (hi-lo>1) {
mid=(hi+lo)/2;
if (lis[mid]>s) {
hi=mid;
} else {
lo=mid;
}
}
si=max(si, hi);
lis[hi]=s;
}
}
cout << si << "\n";
return 0;
}
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 14/14 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 1ms | 500 KiB | ||||
| 3 | Accepted | 1ms | 316 KiB | ||||
| 4 | Accepted | 1ms | 316 KiB | ||||
| 5 | Accepted | 1ms | 316 KiB | ||||
| 6 | Accepted | 1ms | 316 KiB | ||||
| subtask2 | 12/12 | ||||||
| 1 | Accepted | 17ms | 16176 KiB | ||||
| 2 | Accepted | 7ms | 564 KiB | ||||
| 3 | Accepted | 65ms | 6692 KiB | ||||
| 4 | Accepted | 17ms | 1076 KiB | ||||
| 5 | Accepted | 86ms | 5880 KiB | ||||
| 6 | Accepted | 19ms | 1076 KiB | ||||
| 7 | Accepted | 24ms | 1076 KiB | ||||
| 8 | Accepted | 72ms | 4148 KiB | ||||
| subtask3 | 13/13 | ||||||
| 1 | Accepted | 1ms | 508 KiB | ||||
| 2 | Accepted | 8ms | 6196 KiB | ||||
| 3 | Accepted | 59ms | 47768 KiB | ||||
| 4 | Accepted | 328ms | 188468 KiB | ||||
| 5 | Accepted | 347ms | 196148 KiB | ||||
| 6 | Accepted | 303ms | 196328 KiB | ||||
| subtask4 | 23/23 | ||||||
| 1 | Accepted | 4ms | 564 KiB | ||||
| 2 | Accepted | 43ms | 2872 KiB | ||||
| 3 | Accepted | 112ms | 6452 KiB | ||||
| 4 | Accepted | 123ms | 6452 KiB | ||||
| 5 | Accepted | 112ms | 7148 KiB | ||||
| 6 | Accepted | 96ms | 6788 KiB | ||||
| 7 | Accepted | 108ms | 6876 KiB | ||||
| 8 | Accepted | 115ms | 6456 KiB | ||||
| 9 | Accepted | 119ms | 6764 KiB | ||||
| 10 | Accepted | 76ms | 7088 KiB | ||||
| subtask5 | 16/16 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| 2 | Accepted | 2ms | 748 KiB | ||||
| 3 | Accepted | 2ms | 1332 KiB | ||||
| 4 | Accepted | 3ms | 2360 KiB | ||||
| 5 | Accepted | 3ms | 2356 KiB | ||||
| 6 | Accepted | 3ms | 2356 KiB | ||||
| 7 | Accepted | 3ms | 2356 KiB | ||||
| 8 | Accepted | 3ms | 2356 KiB | ||||
| subtask6 | 22/22 | ||||||
| 1 | Accepted | 3ms | 2540 KiB | ||||
| 2 | Accepted | 17ms | 16180 KiB | ||||
| 3 | Accepted | 638ms | 196148 KiB | ||||
| 4 | Accepted | 517ms | 196288 KiB | ||||
| 5 | Accepted | 351ms | 196148 KiB | ||||
| 6 | Accepted | 316ms | 196148 KiB | ||||
| 7 | Accepted | 342ms | 196284 KiB | ||||
| 8 | Accepted | 303ms | 196148 KiB | ||||
| 9 | Accepted | 349ms | 196148 KiB | ||||
| 10 | Accepted | 345ms | 196148 KiB | ||||
| 11 | Accepted | 303ms | 196148 KiB | ||||
| 12 | Accepted | 301ms | 196172 KiB | ||||