Submission #106453

# Submission time Handle Problem Language Result Execution time Memory
106453 2019-04-18T14:20:27 Z nxteru Split the sequence (APIO14_sequence) C++14
0 / 100
70 ms 41336 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){
	if(b.x==c.x)return b.y>=c.y;
	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--;
			if(!(r-1>=l&&dq[r-1].x==p.x))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++;
			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:22: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:26: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 2 ms 384 KB contestant found the optimal answer: 999 == 999
3 Incorrect 2 ms 384 KB Integer 0 violates the range [1, 1]
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB contestant found the optimal answer: 1093956 == 1093956
2 Correct 2 ms 384 KB contestant found the optimal answer: 302460000 == 302460000
3 Runtime error 4 ms 640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB contestant found the optimal answer: 610590000 == 610590000
2 Correct 2 ms 384 KB contestant found the optimal answer: 311760000 == 311760000
3 Runtime error 4 ms 896 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 512 KB contestant found the optimal answer: 21503404 == 21503404
2 Correct 2 ms 512 KB contestant found the optimal answer: 140412195 == 140412195
3 Runtime error 7 ms 1152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 1408 KB contestant found the optimal answer: 1818678304 == 1818678304
2 Correct 5 ms 1408 KB contestant found the optimal answer: 1326260195 == 1326260195
3 Runtime error 10 ms 4736 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 35 ms 9976 KB contestant found the optimal answer: 19795776960 == 19795776960
2 Correct 27 ms 10004 KB contestant found the optimal answer: 19874432173 == 19874432173
3 Runtime error 70 ms 41336 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -