noip模拟赛 排序

分析:因为序列是不严格单调的,所以挪动一个数其实就相当于把这个数给删了.如果a[i] < a[i-1],那么可以删掉a[i],也可以删掉a[i-1](!如果没考虑到这一点就只有90分),删后判断一下序列是否单调,删的次数是否≤1即可.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n, a[1000010], cnt;
bool flag = false;

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    for (int i = 2; i <= n; i++)
        if (a[i] < a[i - 1])
        {
            if (cnt == 1)
            {
                flag = 1;
                break;
            }
            if (i != n && a[i + 1] < a[i - 1] && a[i] < a[i - 2])
            {
                flag = 1;
                break;
            }
            cnt++;
        }
    if (flag)
        puts("NO");
    else
        puts("YES");

    return 0;
}

 

posted @ 2017-10-20 15:22  zbtrs  阅读(193)  评论(0编辑  收藏  举报