44pts求调
  • 板块P11396 排队
  • 楼主mdxz114514
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/21 10:04
  • 上次更新2024/12/21 13:17:57
查看原帖
44pts求调
941228
mdxz114514楼主2024/12/21 10:04
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,arr[300005],b[300005],t[300005];//顺序,编号对应的下标,visit
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		b[arr[i]]=i;
	}
	for(int i=1;i<=n;i++){
		if(t[i]!=-1)cout<<i<<' ';
		if(b[i]>1&&(arr[b[i]-1]>arr[b[i]+1]||b[i]==n)&&(t[arr[b[i]-1]]!=-1)){//如果向左找更优或者只能向左找,并且能在左边找 
			for(int j=b[i]-1;j>=1&&arr[j]>arr[j+1]&&t[arr[j]]!=-1;j--){//向左边找
				t[arr[j]]=-1;//标记
				cout<<arr[j]<<' ';
			}
		}else if(b[i]<n&&(t[arr[b[i]+1]]!=-1)){
			for(int j=b[i]+1;j<=n&&arr[j-1]<arr[j]&&t[arr[j]]!=-1;j++){
				t[arr[j]]=-1;
				cout<<arr[j]<<' ';
			}
		}
	}
}
2024/12/21 10:04
加载中...