Codeforces Round #681 (Div. 2)D. Extreme Subtraction
题意:
从头到一个位置可以全都减一,从尾到一个位置可以全部减一,问能不能使序列都为0。
思路:
从尾进行处理,处理成一个递增的,如果不能,即某项出现小于0即退出。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int t,n,ans,pre,crt;
int a[N];
int main(){
t=1;
cin>>t;
while(t--){
cin>>n;
pre=0x3f3f3f3f;
crt=0;
for(int i=1;i<=n;i++) cin>>a[i];
bool flag=true;
for(int i=n;i>=1;i--){
a[i]-=crt;
if(a[i]<0){
flag=false;
break;
}
if(a[i]<=pre) pre=a[i];
else{
crt+=a[i]-pre;
}
//cout<<crt<<endl;
}
if(flag) puts("YES");
else puts("NO");
}
return 0;
}