以下为我的代码:
#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?