社区讨论
就是题解的做法,求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 条回复,欢迎继续交流。
正在加载回复...