题解:这题是用区间求连续的最大值。需要注意不能区1~n
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int inf = 0x7FFFFFFF;
const int N = 500005;
const int mod = 998244353;
ll a[N];
void solve(){
int n;
scanf("%d",&n);
ll sum = 0,ans = 0,max1 = -inf;
for(int i = 0;i < n;i++){
scanf("%lld",a+i);
// cin >> a[i];
sum += a[i];
}
for(int i = 0;i < n;i++){
ans += a[i];
max1 = max(max1,ans);
if(i != n-1 && max1 >= sum){
cout<<"No\n";
return;
}
if(ans < 0) ans = 0;
}
ans = 0;
max1 = -inf;
for(int i = n-1;i >= 0;i--){
ans += a[i];
max1 = max(max1,ans);
if(i != 0 && max1 >= sum){
cout<<"No\n";
return;
}
if(ans < 0) ans = 0;
}
cout<<"Yes\n";
}
int main(){
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}