1017. The Best Peak Shape (35)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yhf_naive/article/details/60959561

感想:这题挺水的,,,,,知道考T去了。。。。

另:这题大概是有O(NlogN)的解法的只是我还没想到,当时我只是试着用N2的方法,没想到过了

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<stack>
#include<map>
#include<vector>
#include<deque>
#include<cmath>
using namespace std;
int b=0,c=0,d=0,f=10004,N;
struct num{
	int n;
	int l1,l2;
}a[10002];
int main(){
	int i,j,k,max1;cin>>N;
	for(i=0;i<N;i++)
		cin>>a[i].n;
	for(j=0;j<=N-1;j++){
		max1=-1;
		for(k=0;k<j;k++){
			if(a[k].n<a[j].n&&max1<a[k].l1)
			max1=a[k].l1;
		}
		a[j].l1=max1+1;
	}
	for(j=N-1;j>=0;j--){
		max1=-1;
		for(k=N-1;k>j;k--){
			if(a[k].n<a[j].n&&max1<a[k].l2)
			max1=a[k].l2;
		}
		a[j].l2=max1+1;
	}
	max1=-1;
	for(i=1;i<N-1;i++){
		if((a[i].l1+a[i].l2>max1||(a[i].l1+a[i].l2==max1&&(abs(a[i].l1-a[i].l2)<f)))&&(a[i].l1*a[i].l2!=0)){
			b=a[i].l1+a[i].l2+1;
			max1=a[i].l1+a[i].l2;
			c=i;
			d=a[i].n;
			f=abs(a[i].l1-a[i].l2);
		}
	}
	if(b!=0)
	cout<<b<<" "<<c+1<<" "<<d<<endl;
	else  cout<<"No peak shape"<<endl;
	return 0;
}


猜你喜欢

转载自blog.csdn.net/yhf_naive/article/details/60959561
35