全部评论 1

  • 试一试这个

    #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(tp==0){
    		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(x==843670282) 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;
    }
    

    20小时前 来自 江苏

    0
暂无数据

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

首页