Submission #112666

#TimeUsernameProblemLanguageResultExecution timeMemory
112666nafis_shifatSplit the sequence (APIO14_sequence)C++14
39 / 100
2047 ms24064 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> v;
ll cumsum[100008];
int mtg=-1;
ll bs(int l,int r)
{
	int lo=l;
	int hi=r;
	int res=0;
	while(lo<=hi)
	{
		int mid=(lo+hi)/2;
	    
	    int a=cumsum[mid]-cumsum[l-1];
	    int b=cumsum[r]-cumsum[mid-1];
	    if(a>b)
	    {
	    	hi=mid-1;
	    	
		}
		else 
		{
			res=mid;
			lo=mid+1;
		}
		
	}
	mtg=res;	
	return (cumsum[res]-cumsum[l-1])*(cumsum[r]-cumsum[res]);	
	
}


int main()
{
	int n,k;
	cin>>n>>k;
	
	ll a[n+1];
	cumsum[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		cumsum[i]=cumsum[i-1]+a[i];
		
	}
	ll dp[n+1][k+1]={};
	int hld[n+1][k+1];
	int next[n+1][k+1];
	for(int i=1;i<=n;i++)
	{
	    dp[i][1]=bs(i,n);
	    hld[i][1]=mtg;
	    
	}
	
	for(int j=2;j<=k;j++)
	{
	    for(int i=1;i<n;i++)
	    {
	        for(int l=i;l<n;l++)
	        {
	            ll tmp=(cumsum[l]-cumsum[i-1])*(cumsum[n]-cumsum[l])+dp[l+1][j-1] ;
	            if(tmp  >  dp[i][j])
	            {
	                dp[i][j]=tmp;
	                
	                hld[i][j]=l;
	            }
	        }
	    }
	}
	cout<<dp[1][k]<<endl;;
	int l=1;
	for(int i=k;i>0;i--)
	{
	    cout<<hld[l][i]<<" ";
	    l=hld[l][i]+1;
	    
	}
	
}

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:51:6: warning: unused variable 'next' [-Wunused-variable]
  int next[n+1][k+1];
      ^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...