D. Extreme Subtraction 単調増加と単調減少に分離

string solve(){
  ll N;
  cin>>N;
  VI V(N);
  rep(i, N){
    cin >> V[i];
  }
  VI A(N); // decreasing
  VI B(N); // increasing
  A[0]=V[0];
  FOR(i,1,N){
    A[i] = min(A[i-1], V[i]-B[i-1]);
    B[i] = V[i]-A[i];
    if(B[i]<B[i-1]) return "NO";
    if(A[i]<0 or B[i]<0) return "NO";
  }
  return "YES";
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N; 
    cin>>N;

    while(N--){
      auto ans = solve();
      p(ans);
    }
    
    return 0;
}

memo image

f:id:peroon:20201105101827p:plain