社区讨论

就是题解的做法,求hack数据

CF1367F2 Flying Sort (Hard Version)参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m0p1q4uk
此快照首次捕获于
2024/09/05 16:49
2 年前
此快照最后确认于
2024/09/06 16:13
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,t,cnt;
int a[N],b[N];
map<int,int> pc;
int tf[N],tb[N],tt[N],tfa[N],tba[N];
int dp[N];
int ans=0;
int main(){
	ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
	cin>>t;
	while(t--){
		pc.clear();
		cnt=0;
		ans=0;
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
		for(int i=0;i<=n+1;i++)tf[i]=tb[i]=0,tt[i]=0,dp[i]=0,tfa[i]=tba[i]=0;
		sort(b+1,b+n+1);
		for(int i=1;i<=n;i++)if(!pc[b[i]])pc[b[i]]=++cnt;
		for(int i=1;i<=n;i++)b[i]=pc[a[i]];
		for(int i=1;i<=n;i++){
			if(!tt[b[i]])tf[b[i]]=i,tfa[b[i]]=tt[b[i]-1];
			tt[b[i]]++;
		}
		for(int i=0;i<=cnt;i++)tt[i]=0;
		for(int i=n;i>=1;i--){
			if(!tt[b[i]])tb[b[i]]=i,tba[b[i]]=tt[b[i]+1];
			tt[b[i]]++;
		}
		for(int i=1;i<=cnt;i++){
			dp[i]=tfa[i]+tt[i];
			if(tb[i-1]<tf[i])dp[i]=max(dp[i],tt[i]+dp[i-1]);
			ans=max(ans,dp[i]+tba[i]);
		}
		cout<<n-ans<<"\n";
	}
	
	return 0;
} 

回复

2 条回复,欢迎继续交流。

正在加载回复...