Problem: 2060D - Subtract Min Sort
Language: c++17 

Solution 1 (runtime: 93 ms):
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr(i, a, b) for (int i = a; i < b; i++)
#define vi vector<int>
#define vc vector<char>
#define pb push_back
#define ub(x, v) upper_bound(v.begin(), v.end(), x)
#define lb(x, v) lower_bound(v.begin(), v.end(), x)
#define lbi(x, v) lower_bound(v.begin(), v.end(), x) - v.begin()
#define ubi(x, v) upper_bound(v.begin(), v.end(), x) - v.begin()
#define all(a) (a).begin(), (a).end()
int power(int a, int b)
{
    int result = 1;
    while (b)
    {
        if (b & 1)
            result = result * a;
        a = a * a;
        b >>= 1;
    }
    return result;
}
#define fast                          \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL)
signed main()
{
    fast;
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        vi v(n);
        fr(i, 0, n) { cin >> v[i]; }
        vi maxi;
        int k = 0;
        for(int i=0;i<n-1;i++){
            int l = min(v[i],v[i+1]);
            v[i]-=l;
            v[i+1]-=l;
        }
        if(is_sorted(all(v))){
            cout<<"YES"<<endl;
        }
        else{cout<<"NO"<<endl;}
        // if (v[0] > v[1])
        // {
        //     cout << "NO" << endl;
        // }
        // else

        // {
        //     int k = 1;
        //     while (v[0] == v[k] && k < n)
        //     {
        //         k++;
        //     }
        //     if (k == n)
        //     {
        //         cout << "YES" << endl;
        //     }
        //     else if (v[0] > v[k])
        //     {
        //         cout << "NO" << endl;
        //     }
        //     else
        //     {
        //         int sum = 0;
        //         fr(i, 0, n - 2)
        //         {
        //             int l = min(v[i], v[i + 1]);
        //             int k = max(v[i], v[i + 1]);
        //             if (k - l > v[i + 2])
        //             {
        //                 sum = 1;
        //                 break;
        //             }
        //             else
        //             {
        //                 v[i] -= l;
        //                 v[i + 1] -= l;
        //             }
        //         }
        //         if (v[n - 2] > v[n - 1])
        //         {
        //             sum = 1;
        //         }
        //         if (sum)
        //         {
        //             cout << "NO" << endl;
        //         }
        //         else
        //         {
        //             cout << "YES" << endl;
        //         }
        //     }
        // }
    }
}

Solution 2 (runtime: 93 ms):
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

#define endl "\n"
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define debug(a) cout<<#a<<' '<<a<<endl;
#define cut cout<<endl <<"-------------------"<<endl;
typedef long long ll;
typedef pair<int,int> pii;
typedef double db;

const int N = 2e5+10;
const ll mod=1e9 + 7, inf = 0x3f3f3f3f;
mt19937 mrand(time(0));     
int rnd(int x) { return mrand() % x;}
ll qmi(ll a,ll b,ll p) {ll res=1;a%=p; assert(b>=0); for(;b;b/=2){if(b&1)res=res*a%p;a=a*a%p;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}

void init()
{
    // 1 2 3 4
    // 0 0 0 2
    int n;
    cin >> n;
    vector<int> a(n + 1, inf);
    for(int i = 0; i < n; i ++) cin >> a[i];
    bool ans = 1;
    for(int i = 0; i < n; i ++)
    {
        if(i && a[i] < a[i - 1])
        {
            cout << "NO" << endl;
            return;
        }
        int mi = min(a[i], a[i + 1]);
        a[i] -= mi;
        a[i + 1] -= mi;
    }
    cout << "YES" << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin.tie(0);
    
    int _;
    cin>>_;
    // _ = 1; 
    while(_--)
    {
        init();
    }

    return 0;
}