Submission #106463

# Submission time Handle Problem Language Result Execution time Memory
106463 2019-04-18T14:32:53 Z nxteru Split the sequence (APIO14_sequence) C++14
0 / 100
22 ms 10496 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double D;
typedef pair<ll,ll> P;
#define M 1000000007
#define F first
#define S second
#define PB push_back
#define INF 1000000000000000000
struct t{
	ll x,y,q;
};
bool check(t a,t b,t c){
	return D(c.y-b.y)/D(b.x-c.x)<=D(b.y-a.y)/D(a.x-b.x);
}
ll n,m,s[100005],dp[205][100005],b[205][100005],l,r;
t dq[100005];
vector<int>ans;
int main(void){
	scanf("%lld%lld",&n,&m);
	m++;
	for(int i=1;i<=n;i++){
		ll a;
		scanf("%lld",&a);
		s[i]=s[i-1]+a;
	}
	for(int i=0;i<=m;i++)for(int j=0;j<=n;j++)dp[i][j]=INF;
	dp[0][0]=0;
	for(int i=1;i<=m;i++){
		l=0,r=0;
		for(int j=1;j<=n;j++){
			if(dp[i-1][j-1]<INF){
				t p=t{-2LL*s[j-1],s[j-1]*s[j-1]+dp[i-1][j-1],j-1};
				while(r-2>=l&&check(dq[r-2],dq[r-1],p))r--;
				dq[r++]=p;
				while(l+1<r&&dq[l].x*s[j]+dq[l].y>dq[l+1].x*s[j]+dq[l+1].y)l++;
			}
			if(l<r){
				b[i][j]=dq[l].q;
				dp[i][j]=dq[l].x*s[j]+dq[l].y+s[j]*s[j];
			}
		}
	}
	printf("%lld\n",(s[n]*s[n]-dp[m][n])/2LL);
	int x=n;
	for(int i=m;i>1;i--){
		ans.PB(b[i][x]);
		x=b[i][x];
	}
	for(int i=ans.size()-1;i>=0;i--){
		printf("%d",ans[i]);
		if(i==0)printf("\n");
		else printf(" ");
	}
}

Compilation message

sequence.cpp: In function 'int main()':
sequence.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld%lld",&n,&m);
  ~~~~~^~~~~~~~~~~~~~~~~~
sequence.cpp:25:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld",&a);
   ~~~~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB contestant found the optimal answer: 108 == 108
2 Correct 3 ms 384 KB contestant found the optimal answer: 999 == 999
3 Correct 2 ms 384 KB contestant found the optimal answer: 0 == 0
4 Correct 2 ms 384 KB contestant found the optimal answer: 1542524 == 1542524
5 Correct 2 ms 512 KB contestant found the optimal answer: 4500000000 == 4500000000
6 Incorrect 2 ms 384 KB contestant didn't find the optimal answer: 0 < 1
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 384 KB contestant didn't find the optimal answer: 252308 < 1093956
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB contestant didn't find the optimal answer: 484133 < 610590000
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 512 KB contestant didn't find the optimal answer: 395622 < 21503404
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 6 ms 1408 KB contestant didn't find the optimal answer: 1187850 < 1818678304
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 10496 KB contestant didn't find the optimal answer: 5054352 < 19795776960
2 Halted 0 ms 0 KB -