求Hack+1
查看原帖
求Hack+1
221023
LuomuQDM楼主2022/7/24 18:22

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;
}

望与各位大佬互关

2022/7/24 18:22
加载中...