// #pragma GCC optomize ("Ofast")
// #pragma GCC optomize ("unroll-loops")
// #pragma GCC target ("avx,avx2,fma")
#include <bits/stdc++.h>
#define F first
#define S second
#define ll long long
//#define int long long
#define pb push_back
#define all(x) (x.begin(),x.end())
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
const ll N = 5e5+9, INF = 1e18 , inf = 1e9+9, mod = 1e9+9;
int a[N];
int suf[N];
int pref[N];
signed main(){
ios;
int tt=1;
// cin>>tt;
while(tt--){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
pref[i]=pref[i-1]+a[i];
}
for(int i=n;i>=1;i--)suf[i]=suf[i+1]+a[i];
if(n<=20){
int ans=1;
for(int mask=0;mask<(1<<n);mask++){
vector<int>pos;
pos.pb(0ll);
for(int i=0;i<n;i++){
if((1<<i)&mask)pos.pb(i+1);
else if(i+1==n)pos.pb(n);
}
vector<int>res;
for(int i=1;i<pos.size();i++){
int l=pos[i-1];
int r=pos[i];
res.pb(pref[r]-pref[l]);
}
if(is_sorted(res.begin(),res.end())){
int sz=res.size();
// cout<<sz<<'\n';
// for(auto to:pos)cout<<to<<" ";
// cout<<"-----\n";
ans=max(ans,sz);
}
}
cout<<ans;
}else{
int ans=1;
for(int j=1;j<=n;j++){
int x=pref[j];
int seg=1;
int sum=0;
for(int i=j+1;i<=n;i++){
sum+=a[i];
if(sum>=x && sum<=suf[i+1]){
x=sum;
sum=0;
seg++;
}
}
if(sum>=x)seg++;
ans=max(ans,seg);
}
cout<<ans;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |