为什么老是25分呀,求助高手
查看原帖
为什么老是25分呀,求助高手
947041
wj2008楼主2023/11/27 18:31
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e6;
int mx[N],mn[N];
int p1,p2;
int sd[N],sx[N];
int a[N];
map<int,int> w;
signed main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(w[a[i]]==0){
			w[a[i]]=i;
		}
	}
	//cout<<w[1]<<endl;
	for(int i=1;i<=n;i++){
		while(a[i]>=a[mx[p1]]&&p1!=0){
			p1--;
		}
		sd[i]=mx[p1];
		mx[++p1]=i;
		while(a[i]<=a[mn[p2]]&&p2!=0){
			p2--;
		}
		sx[i]=mn[p2];
		mn[++p2]=i;
	}
	int sum=0;
	/*for(int i=1;i<=n;i++){
		cout<<sd[i]<<" ";
	} cout<<endl;
	for(int i=1;i<=n;i++){
		cout<<sx[i]<<" ";
	}cout<<endl;*/
	for(int next=n;next>=1;next--){
		int pre=next;
		while(a[pre-1]==a[pre]){
			pre--;
		}
		while(sx[pre]>=sd[next]){
			int u=pre;
			pre=sx[pre];
			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;
}
```为什么老是25分呀,求助
2023/11/27 18:31
加载中...