CDQ 维护斜率优化DP


Building Bridges

code:

#include
#include
#include
using namespace std;
#define int long long
const int MAXN=2e5+5;
int n,h[MAXN],w[MAXN],dp[MAXN],s[MAXN],q[MAXN];
int POW(int x){return x*x;
}
struct ren{
	int id,x,y,k;
}a[MAXN],t[MAXN];
bool cmp(ren x,ren y){return x.k>1;
	int t1=l,t2=mid+1;
	for(int i=l;i<=r;i++){
		if(a[i].id<=mid) t[t1++]=a[i];
		else t[t2++]=a[i];
	}
	for(int i=l;i<=r;i++) a[i]=t[i];
	cdq(l,mid);
	int he=1,ti=0;
	for(int i=l;i<=mid;i++){
		if(i!=l&&a[i].x==a[i-1].x) continue;
		while(he