感想:这题挺水的,,,,,知道考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; }