Description

给定一个长度为 \(n\) 的序列,每次可以对一个前缀或后缀 \(-1\),求能否使得整个数列为 \(0\)

Solution

将序列拆分为一个不上升序列和一个不下降序列的和,可以让不下降序列从 \(0\) 开始,每次遇到一个 \(a_i-a_{i-1} > 0\) 的位置,就将这个差值加进去,最后判定原序列减去这个不下降序列是否为一个不上升序列。

#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve()
{
    int n;
    cin >> n;
    vector<int> a(n + 2);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    int c = 0;
    for (int i = 1; i <= n; i++)
    {
        if (i > 1 && a[i] > a[i - 1])
            c += a[i] - a[i - 1];
    }
    int flag = c <= a[n];
    cout << (flag ? "YES" : "NO") << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

相关文章:

  • 2018-12-07
  • 2021-09-26
  • 2020-02-04
  • 2021-10-31
猜你喜欢
  • 2020-11-04
  • 2021-09-20
  • 2021-08-19
  • 2021-08-25
相关资源
相似解决方案