Submission #106455

# Submission time Handle Problem Language Result Execution time Memory
106455 2019-04-18T14:23:26 Z nxteru Split the sequence (APIO14_sequence) C++14
0 / 100
17 ms 8192 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 100000000000000000
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[25][100005],b[20][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++){
			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--;
			while(l+1<r&&dq[l].x*s[j]+dq[l].y>=dq[l+1].x*s[j]+dq[l+1].y)l++;
			b[i][j]=dq[l].q;
			dp[i][j]=min(dq[l].x*s[j]+dq[l].y+s[j]*s[j],dp[i][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 Incorrect 2 ms 384 KB Integer 0 violates the range [1, 6]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Integer 0 violates the range [1, 49]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 384 KB Integer 0 violates the range [1, 199]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 512 KB Integer 0 violates the range [1, 999]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 1152 KB Integer 0 violates the range [1, 9999]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 17 ms 8192 KB Integer 0 violates the range [1, 99999]
2 Halted 0 ms 0 KB -