#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(), x.end()
#define ins insert
#define pb push_back
#define F first
#define S second
const int N = 2e5+4, M = 5e5 + 7;
const int mod = 1e9 + 7;
int a[N], b[N], c[N], pf[N], sf[N];
pair<int, int>sf1[N];
void solve(){
int n;
cin>>n;
for(int i = 1; i <= n; i++){ cin>>a[i]; c[i] = a[i];}
for(int i = 1; i <= n; i++) cin>>b[i];
sort(c + 1, c + n + 1);
for(int i = 1; i <= n; i++){
if(c[i] == c[i - 1]) continue;
for(int j = 1; j <= n; j++){
if(a[j] != c[i]) continue;
int l = j - 1, r = j + 1;
while(l >= 1 && a[l] < a[j]) l--;
l++;
while(r <= n && a[r] < a[j]) r++;
r--;
if(a[r + 1] == c[i]){
pf[j] = 0;
sf[r + 1] = 0;
sf1[r + 1] = {0, r + 1};
for(int k = j; k <= r; k++){
if(k != j) pf[k] = pf[k - 1];
if(b[k] == c[i]) pf[k]++;
else if(a[k] == b[k]) pf[k]--;
}
for(int k = r + 1; k > j; k--){
if(k != r + 1) sf[k] = sf[k + 1], sf1[k] = sf1[k + 1];
if(b[k] == c[i]) sf[k]++;
else if(b[k] == a[k]) sf[k]--;
if(sf[k] > sf1[k].F){
sf1[k] = {sf[k], k};
}
}
int mx = 0, l1 = j, r1 = r + 1;
for(int k = j; k <= r; k++){
if(pf[k] + sf1[k + 1].F - sf[r + 1] - pf[j] > mx){
mx = pf[k] + sf1[k + 1].F - sf[r + 1] - pf[j];
l1 = k;
r1 = sf1[k + 1].S;
}
}
for(int k = j; k <= l1; k++){
a[k] = c[i];
}
for(int k = r + 1; k >= r1; k--){
a[k] = c[i];
}
}
else{
pf[j] = 0;
for(int k = j; k <= r; k++){
if(k != j) pf[k] = pf[k - 1];
if(b[k] == c[i]) pf[k]++;
else if(a[k] == b[k]) pf[k]--;
}
int mx = 0, l1 = j;
for(int k = j; k <= r; k++){
if(pf[k] - pf[j] > mx){
mx = pf[k] - pf[j];
l1 = k;
}
}
for(int k = j; k <= l1; k++){
a[k] = c[i];
}
}
if(a[l - 1] != c[i]){
sf[j] = 0;
for(int k = j; k >= l; k--){
if(k != j) sf[k] = sf[k + 1];
if(b[k] == c[i]) sf[k]++;
else if(a[k] == b[k]) sf[k]--;
}
int mx = 0, l1 = j;
for(int k = j; k >= l; k--){
if(sf[k] - sf[j] > mx){
mx = sf[k] - sf[j];
l1 = k;
}
}
for(int k = l1; k <= j; k++){
a[k] = c[i];
}
}
}
}
int ans = 0;
for(int i = 1; i <= n; i++) if(a[i] == b[i]) ans++;
//for(int i = 1; i <= n; i++) cout<<a[i]<<' ';
cout<<ans<<'\n';
}
main(){
ios_base :: sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
//cin>>t;
for(int i = 1; i <= t; i++){
//cout<<"Case "<<i<<": ";
solve();
}
}
Compilation message (stderr)
exam.cpp:103:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
103 | main(){
| ^~~~
# | 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... |