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;
}
原文地址:https://www.cnblogs.com/shmilky/p/14088994.html