这道题,读的时候感觉挺复杂的,但是自己用笔画了画,结果发现不就是单增单减才能最后放到同一个pillar上面吗?
那分析到这里就知道了这个题就是找最大值下标,然后判断前面是不是单增,后面是不是单减的了;
AC代码
#include<map>
#include<list>
#include<ctime>
#include<queue>
#include<deque>
#include<cmath>
#include<stack>
#include<string>
#include<cstdlib>
#include<cstring>
#include <iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//ll gcd(ll a,ll b){
// return b?gcd(b,a%b):a;
//}
//ll QP(ll x,ll n,ll Mod){
// ll res=1;
// while(n){
// if(n&1){
// res=(res*x)%Mod;
// }
// x=(x*x)%Mod;
// n>>=1;
// }
// return res;
//}
//
int main(){
int n,Max=0,index;
scanf("%d",&n);
int a[200010];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>Max) Max=a[i],index=i;
}
for(int i=1;i<=index;i++){
if(a[i]<a[i-1]) //判断前面是不是单增;
{
puts("NO\n");
return 0;
}
}
for(int i=index+1;i<n;i++){
if(a[i]>a[i-1])//判断后面是不是单减
{
puts("NO\n");
return 0;
}
}
puts("YES\n");
return 0;
}