rt。我也不知道自己的方法怎么解释正确性,但是样例他就是都过了。。。评了只有50pts,暂时没发现什么能hack掉的数据,希望大佬指教。
思路不太好描述,先求出选取的数列,然后从小到大找最大值。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int read(){
char c=getchar();int ans=0;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')ans=ans*10+c-'0',c=getchar();
return ans;
}
vector<int>p[1000010];
int n,a[1000010],b[1000010];
int mx[1000010],ans;
bool v[1000010];
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<=n;i++){
b[i]=read();
mx[i]=max(a[i],b[i]);
v[mx[i]]=1;
}
for(int i=0;i<=n;i++)p[i].push_back(0);
for(int i=1;i<=n;i++){
if(v[min(a[i],b[i])])mx[i]=min(a[i],b[i]);
else mx[i]=max(a[i],b[i]);
p[mx[i]].push_back(i);
}
for(int i=0;i<=n;i++)p[i].push_back(n+1);
for(int i=0;i<=n;i++){
for(int j=1;j<p[i].size();j++)ans=max(ans,p[i][j]-p[i][j-1]-1-i);
if(p[i].size()==2)break;
}
printf("%lld\n",ans);
return 0;
}
望与各位大佬互关