版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}