#include<bits/stdc++.h>
using namespace std;
const int N=3e4+100;
int a[N];
int pre=-1;
int main(){
int T;scanf("%d",&T);
while(T--){
bool f=true;
int n;scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int i;
for(i=1;i<=n;i++){
if(a[i]>a[i-1]){
a[i]-=a[i-1];
pre=a[i-1];
for(int j=i+1;j<n;j++){
if(a[j]<a[j-1]){
f=false;
break;
}
if(a[j]-pre<=a[j-1]){
pre=a[j]-a[j-1];
a[j]=a[j-1];
}
else{
a[j]-=pre;
}
}
break;
}
}
if(f){
for(int j=i+1;j<n;j++){
if(a[j]<a[j-1]) f=false;
}
}
if(f) puts("YES");
if(!f) puts("NO");
}
return 0;
}
差分做法:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e4+100;
int a[N],b[N];
int main(){
int T;scanf("%d",&T);
while(T--){
int n;scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
b[0]=a[0];
for(int i=1;i<n;i++){
b[i]=a[i]-a[i-1];
}
ll sum=0;
for(int i=1;i<n;i++){
if(b[i]<0) sum+=abs(b[i]);
}
if(sum<=a[0]) puts("YES");
else puts("NO");
}
return 0;
}