P3628 [APIO2010] 特别行动队
byd 的题敢卡李超线段树!!望周知!!😡😡
然后斜率优化就过了。
#include<bits/stdc++.h>
using namespace std;
#define rd read()
#define ll long long
#define ld long double
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define ROF(i,j,k) for(int i=j;i>=k;i--)
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
const int N=1e6+10;
int n,a,b,c,w[N],q[N],s[N];ll f[N];
ld Y(int x){return 1.0*f[x]+1.0*a*s[x]*s[x]-1.0*b*s[x];}
ld X(int x){return 1.0*s[x];}
ld slope(int x,int y){return (Y(x)-Y(y))/(X(x)-X(y));}
int main(){
n=rd,a=rd,b=rd,c=rd;FOR(i,1,n) w[i]=rd,s[i]=s[i-1]+w[i];
int hh=0,tt=0;
FOR(i,1,n){
while(hh<tt&&slope(q[hh],q[hh+1])>2ll*a*s[i]) hh++;
f[i]=f[q[hh]]+1ll*a*(s[i]-s[q[hh]])*(s[i]-s[q[hh]])+1ll*b*(s[i]-s[q[hh]])+c;
while(hh<tt&&slope(q[tt],q[tt-1])<slope(q[tt],i)) tt--;
q[++tt]=i;
}
printf("%lld\n",f[n]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现