#18过不去,求助
查看原帖
#18过不去,求助
947041
wj2008楼主2023/11/27 19:09
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=4e7;
int mx[N],mn[N];
int p1,p2;
int sd[N],sx[N];
int a[N];
int b[N];
int v=0;
map<int,int> w;
signed main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]!=a[i-1]){
			b[++v]=a[i];
		}
		if(w[b[i]]==0){
			w[b[i]]=i;
		}
	}
	//cout<<w[1]<<endl;
	for(int i=1;i<=v;i++){
		while(b[i]>=b[mx[p1]]&&p1!=0){
			p1--;
		}
		sd[i]=mx[p1];
		mx[++p1]=i;
		while(b[i]<=b[mn[p2]]&&p2!=0){
			p2--;
		}
		sx[i]=mn[p2];
		mn[++p2]=i;
	}
	int sum=0;
	/*for(int i=1;i<=v;i++){
		cout<<sd[i]<<" ";
	} cout<<endl;
	for(int i=1;i<=v;i++){
		cout<<sx[i]<<" ";
	}cout<<endl;*/
	for(int next=v;next>=1;next--){
		int pre=next;
		while(sx[pre]>=sd[next]){
			int u=pre;
			pre=sx[pre];
			if(pre==0){
				
				pre=u;
				break;
			}
		/*	if(pre==0){
			//	cout<<00000;
				if(w[a[u]]!=0&&w[a[u]]!=u){
					//cout<<w[a[u]]<<endl;
					pre=w[a[u]];
					break;
				}else{
					break;
				}
			}*/
		}
		sum++;
		//cout<<pre<<" "<<next<<endl;
		next=pre;
	}cout<<sum;
	return 0;
}
2023/11/27 19:09
加载中...