一开始看到这道题目的时候以为是dp+线段树修改什么的来维护。
但是n=50000好奇怪啊。
看了题解才知道原来是决策单调性+暴力可持久化线段树求某一个区间的花费。
刚好没有怎么写过dp决策单调性的优化,就写一发吧。
AC代码如下:
#include<bits/stdc++.h>
#define ll long long
#define N 100005
#define M 2000005
using namespace std;
int n,m,trtot,fst[N],pnt[N],nxt[N],rt[N],ls[M],rs[M],q[N],lf[N]; ll f[N];
struct node{ int x; ll y,z; }val[M];
node operator +(node u,node v){ return (node){u.x+v.x,u.y+v.y,u.z+v.z}; }
node operator -(node u,node v){ return (node){u.x-v.x,u.y-v.y,u.z-v.z}; }
void ins(int l,int r,int x,int &y,int u,node v){
y=++trtot; val[y]=val[x]+v;
if (l==r) return;
int mid=