44分求调
  • 板块P11396 排队
  • 楼主Czming__
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/12/15 19:07
  • 上次更新2024/12/15 19:24:25
查看原帖
44分求调
1121221
Czming__楼主2024/12/15 19:07
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,p[300002],wei[300001],sum;
bool flag[300002];
vector<int> ans;
void jian(int i){
	sum=wei[i]-1;
	while(sum!=0&&p[sum]>p[sum+1]&&flag[sum]==false){
		flag[sum]=true;
		ans.push_back(p[sum]);
		sum--;
	}
}
void jia(int i){
	sum=wei[i]+1;
	while(sum<=n&&p[sum-1]<p[sum]&&flag[sum]==false){
		flag[sum]=true;
		ans.push_back(p[sum]);
		sum++;
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i];
		wei[p[i]]=i;
	}
	flag[0]=flag[n+1]=true;
	for(int i=1;i<=n;i++){
		if(flag[wei[i]]==true) continue;
		ans.push_back(i);flag[wei[i]]=true;
		if(flag[wei[i]-1]==false&&flag[wei[i]-1]==false){
			if(p[wei[i]-1]>p[wei[i]+1]) jian(i);
			else jia(i);
		}
		else if(flag[wei[i]-1]==false) jian(i);
		else if(flag[wei[i]+1]==false) jia(i);
	}
	for(int i=0;i<ans.size();i++){
		cout<<ans[i]<<" ";
	}
}

Subs #3,5全错了。
但是我这里有没有特判,为什么不是一错全错?
思路也是一样,就是对于每个数 pip_i, 看他左右2数,哪个数大,就朝着哪边伸展最长上升子序列。
但是nn一但大就错了,也不知道为什么。

2024/12/15 19:07
加载中...