题目链接
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1281
题意
题解
求出山峰点放入数组中。
然后二分枚举旗子数。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+7;int a[maxn];
vector<int> V;bool check(int x)
{if(V.size()==0) return false;int cnt=1,tar=V[0]+x;if(cnt==x) return true;for(int i=1;i<V.size();i++){if(cnt==x) return true;if(V[i]>=tar){cnt++;tar=V[i]+x;}if(cnt==x) return true;}return false;
}int main()
{int n;while(~scanf("%d",&n)){V.clear();for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=2;i<n;i++)if(a[i]>a[i-1] && a[i]>a[i+1])V.push_back(i);int l=1,r=maxn,ans=0;while(l<=r){int mid=(l+r)>>1;if(check(mid)) l=mid+1,ans=mid;else r=mid-1;}printf("%d\n",ans);}return 0;
}