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();
}
}