제출 #5522

#제출 시각아이디문제언어결과실행 시간메모리
5522gs12117수열 (APIO14_sequence)C++98
100 / 100
620 ms86328 KiB
#include<stdio.h> int n,m; int a[100100]; long long int b[100100]; long long int dp[100100]; long long int ndp[100100]; int cutp[210][100100]; int deq[100100]; int cut[210]; int qs,qe; int main(){ int i,j,k; scanf("%d%d",&n,&m); for(i=0;i<n;i++){ scanf("%d",&a[i]); b[i+1]=b[i]+a[i]; } for(i=0;i<=n;i++){ dp[i]=b[i]*b[i]; } for(i=0;i<m;i++){ ndp[0]=0; deq[0]=0; qs=0; qe=1; for(j=1;j<=n;j++){ while(qs+1<qe&&dp[deq[qs]]+(b[j]-b[deq[qs]])*(b[j]-b[deq[qs]])>=dp[deq[qs+1]]+(b[j]-b[deq[qs+1]])*(b[j]-b[deq[qs+1]]))qs++; ndp[j]=dp[deq[qs]]+(b[j]-b[deq[qs]])*(b[j]-b[deq[qs]]); cutp[i+1][j]=deq[qs]; while(qs+1<qe&&((long double)b[j]-b[deq[qe-1]])*(dp[deq[qe-1]]+b[deq[qe-1]]*b[deq[qe-1]]-dp[deq[qe-2]]-b[deq[qe-2]]*b[deq[qe-2]])>=((long double)b[deq[qe-1]]-b[deq[qe-2]])*(dp[j]+b[j]*b[j]-dp[deq[qe-1]]-b[deq[qe-1]]*b[deq[qe-1]]))qe--; deq[qe]=j; qe++; } for(j=0;j<=n;j++){ dp[j]=ndp[j]; } } printf("%lld\n",(b[n]*b[n]-dp[n])/2); j=n; for(i=m-1;i>=0;i--){ j=cutp[i+1][j]; cut[i]=j; } for(i=0;i<m;i++){ printf("%d ",cut[i]); } }
#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...