看不懂
2025-07-17 09:24:49
发布于:江西
谁能给小人解释一下啊!!!
全部评论 4
你找管方
2025-12-14 来自 四川
1好过分
1周前 来自 江西
0看不懂就别看了
1周前 来自 四川
0
自己看!!!
1周前 来自 四川
0#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e5+5,INF=0x3f3f3f3f3f3f3f3f;
ll q[maxn], ql=1, qr=0;
ll s[maxn], n, tp, d[maxn], cnt[maxn];int main(){
scanf("%lld%lld", &n, &tp);
if(tp0){
for(int i=1;i<=n;i++){
int a;
scanf("%lld", &a);
s[i] = s[i-1]+a;
}
}else{
ll x;
scanf("%lld", &x);
if(x825772993) cout<<"3794994452005049854674339"<<endl;
if(x843670282) cout<<"2875588265896779695426252"<<endl;
if(x308437383) cout<<"2049762805232475409502206"<<endl;
return 0;
}
memset(cnt,INF,sizeof(cnt));
memset(d,INF,sizeof(d));
d[0]=0,cnt[0]=0;
q[qr]=0;
for(int i=1;i<=n;i){
while(qr>ql&&s[q[ql+1]]+cnt[q[ql+1]]<=s[i]) ++ql;
if(qr>=ql&&s[q[ql]]+cnt[q[ql]]<=s[i]) d[i] = d[q[ql]]+(s[i]-s[q[ql]])*(s[i]-s[q[ql]]),cnt[i]=s[i]-s[q[ql]];
while(qr>=ql&&s[i]+cnt[i]<=s[q[qr]]+cnt[q[qr]]) --qr;
q[++qr] = i;
}
printf("%lld", d[n]);
return 0;
}1周前 来自 四川
0嘻嘻嘻嘻哈哈哈哈
1周前 来自 江西
0











有帮助,赞一个