记录编号 |
595007 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAATTT |
题目名称 |
[CSP 2019S]划分 |
最终得分 |
88 |
用户昵称 |
flyfree |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
13.308 s |
提交时间 |
2024-10-06 21:30:12 |
内存使用 |
82.78 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll __int128
#define MAXN 40000010
#define mod 1073741824
inline ll read(){
ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
inline void write(ll x){
if(x<0){
putchar('-');
x*=-1;
}
if(x>9)write(x/10);
putchar(x%10+'0');
}
struct node{
ll id,A;
};
ll n,type;
ll a[MAXN],s[MAXN],dp[MAXN];//b[MAXN];
deque <node> q;
void get_in1(){
for(int i=1;i<=n;i++){
a[i]=read();
s[i]=s[i-1]+a[i];
}
}
//void get_in2(){
//// cout<<"0\n";
// ll x=read(),y=read(),z=read(),b1=read(),b2=read(),m=read();
// b[1]=b1,b[2]=b2;
// for(int i=3;i<=n;i++){
// b[i]=(x*b[i-1]+y*b[i-2]+z)%mod;
// }
// ll now=1;
// for(int i=1;i<=m;i++){
// ll l=read(),r=read(),p=read();
// while(now<=p){
// a[now]=(b[now]%(r-l+1))+l;
// now++;
// }
// }
// return;
//}
int main(){
freopen("2019partition.in","r",stdin);
freopen("2019partition.out","w",stdout);
n=read(),type=read();
if(type==0)get_in1();
// else{
//// cout<<"0";
// get_in2();
// }
q.push_front((node){0,0});
for(int i=1;i<=n;i++){
node fnt;
while(!q.empty()){
if(q.front().A<=s[i]){
fnt=q.front();
q.pop_front();
}else break;
}
q.push_front(fnt);
dp[i]=dp[fnt.id]+(s[i]-s[fnt.id])*(s[i]-s[fnt.id]);
node now=(node){i,s[i]*2-s[fnt.id]};
while(!q.empty()){
if(q.back().A>=now.A){
q.pop_back();
}else break;
}
q.push_back(now);
}
write(dp[n]);
return 0;
}