虽然AC了但是有点疑问
查看原帖
虽然AC了但是有点疑问
895690
gghack_Nythix楼主2024/7/15 10:26

以下为我的代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[5000020],st[500005][22],cnt,n;
int L[2000005],R[2000005],sum[2000005];
void bzd(){
	for(int i = 1;i <= n;++i) sum[i] = sum[i - 1] + a[i];
	stack<int>stk;
	for(int i = 1;i <= n;++i) {
		while(!stk.empty() && a[stk.top()] < a[i]) stk.pop();
		L[i] = stk.empty()?0:stk.top();
		stk.push(i);
	}
	while(!stk.empty()) stk.pop();
	for(int i = n;i >= 1;--i) {
		while(!stk.empty() && a[stk.top()] < a[i]) stk.pop();
		R[i] = stk.empty()?0:stk.top();
		stk.push(i);
	}
	for(int i = 1;i <= n;++i) {
		if(L[i] && sum[i] - sum[L[i]] > 0){
			return cout << "NO\n",void();
		}
		if(R[i] && sum[R[i] - 1] - sum[i - 1] > 0){
			return cout << "NO\n",void();
		}
	}
	for(int i = 2;i <= n;++i) if(a[i] > 0 && a[i - 1] > 0) return cout << "NO\n",void();
	cout << "YES\n";
	return ;
}
void solve(){
	cin >> n;
    for(int i = 1;i <= n;++i) cin >> a[i];
    bzd();
    return ;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	// freopen("ritsu4.in","r",stdin);
	int T;
	cin >> T;
	while(T--)solve();
	return 0;
}

为什么判断NO不是区间和>区间最大值而是>0?

2024/7/15 10:26
加载中...