求hack
查看原帖
求hack
326254
LonginusMonkey楼主2024/7/14 19:23

这一份代码WA on 1_03

#include<bits/stdc++.h>
#define int long long
using namespace std;
int N, C;
const int maxn = 200100;
struct node{
	int k, b;
}que[maxn];
int l, r;
int h[maxn];
int dp[maxn];

bool calc(int a, int idx) {
	if(h[idx] * que[a].k + que[a].b >= h[idx] * que[a+1].k + que[a+1].b) {
		return true;
	} else {
		return false;
	}
}

signed main() {
	ios::sync_with_stdio(0); cin.tie(0);
	cin >> N >> C;
	for(int i=1; i<=N; ++i) {
		cin >> h[i];
	}
	l = r = 1;
	que[1].k = -2 * h[1];
	que[1].b = h[1] * h[1];
	for(int i=2; i<=N; ++i) {
		while(l < r and calc(l, i)) {
			++l;
		}
		dp[i] = que[l].k * h[i] + que[l].b + h[i]*h[i] + C;
		que[++r].k = -2 * h[i];
		que[r].b = dp[i] + h[i]*h[i];
	}
	cout << dp[N];
	return 0;
}
2024/7/14 19:23
加载中...