CF1815A 题解

题意

给出一串数,请问,通过将 \(a_i\)\(a_{i+1}\) 同时加 \(1\) 或减 \(1\)若干次,能否使它单调不减

思路

我们发现,如果要让 \(a_i\)\(a_{i - 1}\) 满足单调不减,可以通过修改 \(a_i\)\(a_{i+1}\)\(a_i\)\(a_{i-1}\),那么我们修改的目标是什么呢?其实,我们可以干脆把 \(a_i\)\(a_{i-1}\) 修改相等,这样,\(a_1\)\(a_{n-1}\) 就都能满足要求,并且这样后面的元素可以调到的范围也会更大。

接下来,我们需要考虑最后一个数 \(a_n\) 是否可以符合要求,我们发现,如果 \(n\) 为奇数,只需让前 \(n-1\) 的元素全部奇偶对应整体减小即可。如果 \(n\) 为偶数就只能判断 \(a_{n-1}\leq a_{n}\) 了。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int t , n , a[300005] ;
signed main(){
    cin >> t ;
    while( t -- ){
        cin >> n ;
        for( int i = 1 ; i <= n ; i ++ ){
            cin >> a[i] ;
        }
        if( n % 2 ){
            cout << "Yes\n" ;
            continue ;
        }
        for( int i = 2 ; i < n ; i ++ ){
            if( a[i] != a[i - 1] ){
                int k = a[i] - a[i - 1] ;
                a[i] -= k ;
                a[i + 1] -= k ;
            }
        }
        if( a[n - 1] <= a[n]  ) cout << "Yes\n" ;
        else cout << "No\n" ;
    }
    return 0 ;
}
posted @ 2023-11-15 23:08  SSSSSSSSSSoil  阅读(30)  评论(0)    收藏  举报