Submission #1160243

#TimeUsernameProblemLanguageResultExecution timeMemory
1160243ImperialALENBigger segments (IZhO19_segments)C++20
13 / 100
231 ms456 KiB
// #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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...