求助,证明贪心正确性
查看原帖
求助,证明贪心正确性
323105
CLRLSP楼主2021/8/28 19:47
#include<bits/stdc++.h>
using namespace std;
const int ma=5e5+100;
int n;
int h[ma];
int a[ma];
int b[ma];
int ind;
int ans=0;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

int main(){
	n=read();
	for(int i=1;i<=n;i++) h[i]=read();
	a[++ind]=h[1];
	for(int i=1;i<=n;i++){
		if(ind>=2){
			if(a[ind-1]>=a[ind]&&a[ind]>=h[i]){
				ind--;
			}
			else if(a[ind]<h[i]&&a[ind-1]<a[ind]){
				ind--;
			}
		}
		if(ind&1&&a[ind]<h[i])a[++ind]=h[i];
		else if(ind%2==0 &&a[ind]>h[i]) a[++ind]=h[i];
	}
	ans=ind;
	ind=0;
	b[++ind]=h[1];
	for(int i=1;i<=n;i++){
		if(ind>=2){
			if(b[ind-1]>=b[ind]&&b[ind]>=h[i]){
				ind--;
			}
			else if(b[ind]<h[i]&&b[ind-1]<b[ind]){
				ind--;
			}
		}
		if(ind&1 && b[ind]>h[i])b[++ind]=h[i];
		else if(ind%2==0 &&b[ind]<h[i]) b[++ind]=h[i];
	}
	ans=max(ans,ind);
	cout<<ans;
}

按照自己的想法乱写的,本来以为怎么的都过不了的,但是就AC了

2021/8/28 19:47
加载中...