全部评论 4

  • 你找管方

    2025-12-14 来自 四川

    1
  • 自己看!!!

    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(x
    825772993) cout<<"3794994452005049854674339"<<endl;
    if(x843670282) cout<<"2875588265896779695426252"<<endl;
    if(x
    308437383) 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
暂无数据

提交答案之后,这里将显示提交结果~

首页