单调队列Wa on #7求调
  • 板块AT_dp_z Frog 3
  • 楼主f_hxr_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/23 16:19
  • 上次更新2024/6/23 19:07:12
查看原帖
单调队列Wa on #7求调
754467
f_hxr_楼主2024/6/23 16:19

rt,用了int128也没用

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; 
const LL inf=1e18+7;
const int maxn=2e5+7;
LL N,C,h[maxn];
LL f[maxn];
LL q[maxn<<1],head=1,tail=0;
LL F(LL inx){return f[inx]+h[inx]*h[inx];}
int main(){
	scanf("%lld %lld",&N,&C);
	for(int i=1;i<=N;i++)scanf("%lld",&h[i]);
	q[++tail]=1;
	for(int i=2;i<=N;i++){
		LL xx=2*h[i];
		while(tail-head+1>1&&F(q[head+1])-F(q[head])<=xx*(h[q[head+1]]-h[q[head]]))++head;
		f[i]=f[q[head]]+(h[i]-h[q[head]])*(h[i]-h[q[head]])+C;
		while(tail-head+1>1&&F(q[tail])-F(q[tail-1])*(h[i]-h[q[tail]])>=(F(i)-F(q[tail]))*(h[q[tail]]-h[q[tail-1]]))--tail;
		q[++tail]=i;
	}
	printf("%lld",f[N]);
	return 0;
}
2024/6/23 16:19
加载中...