WA on #11求调
  • 板块AT_dp_z Frog 3
  • 楼主Yh0326
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/22 20:11
  • 上次更新2024/2/22 21:37:37
查看原帖
WA on #11求调
448917
Yh0326楼主2024/2/22 20:11

RT,李超树求调。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
	ll s = 0, w = 1;char ch = getchar();
	while(!isdigit(ch)){if(ch == '-'){w = -1;}ch = getchar();}
	while(isdigit(ch)) s = s * 10 + ch - 48, ch = getchar();
	return s * w;
}
int T, n;
ll c;
struct L
{
	ll k, b;
} a[200005];
int t[4000004];
ll h[200003];
ll f[200003];
int cnt = 0;
inline void add(ll k, ll b)
{
	++ cnt;
	a[cnt].k = k;
	a[cnt].b = b;
}
inline int cmp(ll A, ll B)
{
	if(A == B) return 0;
	else if(A > B) return 1;
	else return -1;
}
inline ll calc(int id, ll x)
{
	return a[id].k * x + a[id].b;
}
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
inline void upd(int x, int l, int r, int u)
{
	int &v = t[x];
	if(l == r)
	{
		if(cmp(calc(v, r), calc(u, l)) == -1) swap(u, v);
		return;
	}
	int mid = (l + r) >> 1;
	int midb = cmp(calc(v, mid), calc(u, mid));
	if(midb == 1) swap(u, v);
	int lb = cmp(calc(v, l), calc(u, l)), rb = cmp(calc(v, r), calc(u, r));
	if(lb == 1) upd(ls(x), l, mid, u);
	if(rb == 1) upd(rs(x), mid + 1, r, u);
}
inline ll query(int x, int l, int r, int k)
{
	ll res = calc(t[x], k);
	if(l == r) return res;
	int mid = (l + r) >> 1;
	if(k <= mid) res = min(res, query(ls(x), l, mid, k));
	if(k > mid) res = min(res, query(rs(x), mid + 1, r, k));
	return res;
}
/*

dp[i] = Min dp[j] + (h[i] - h[j]) ^ 2 + C
      = Min dp[j] + h[i] ^ 2 + h[j] ^ 2 - 2 * h[i] * h[j] + C
      = h[i] ^ 2 + C + Min -2 * h[i] * h[j] + h[j] ^ 2 + dp[j] 

*/
inline void solve()
{
	n = read(), c = read();
	a[0].b = 1e18;
	for(int i = 1;i <= n;++ i) h[i] = read();
	add(-2 * h[1], h[1] * h[1]);
	upd(1, 0, 1000000, cnt);
	for(int i = 2;i <= n;++ i)
	{
		f[i] = h[i] * h[i] + c + query(1, 0, 1000000, h[i]);
		add(-2 * h[i], h[i] * h[i] + f[i]);
		upd(1, 0, 1000000, cnt);
	}
	cout << f[n] << '\n';
}
int main()
{
	T = 1;
	while(T --) solve();
	return 0;
}

2024/2/22 20:11
加载中...