悲剧了。我怎么就这么菜呢


这道题就是纯水题,不过两种东西实际上只要写一个就可以了。。
把所有数取反再算一遍就是第二个的答案了。。
Code:
#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<vector>#define rep(i,n) for(int i=0;i<n;i++)using namespace std;const int maxn=1000000+1;int A[maxn],L[maxn],R[maxn],n;void init(){ cin>>n; rep(i,n) scanf("%d",A+i);}int Cal(){ L[0]=0; for(int i=1;i<n;++i) if(A[i-1]<A[i]) L[i]=L[i-1]; else L[i]=i; R[n-1]=n-1; for(int i=n-2;i>=0;–i) if(A[i+1]<A[i]) R[i]=R[i+1]; else R[i]=i; int ans=0; rep(i,n) ans=max(min(i-L[i],R[i]-i),ans); return ans;}void solve(){ init(); int H=Cal(); rep(i,n) A[i]=-A[i]; int D=Cal(); printf("%d %dn",H,D);}int main(){ //freopen("in","r",stdin); int t;cin>>t; while(t–) solve();}
本高亮代码使用codeHl生成,查看详情