一种只用 17 行的李超树
struct line{
int k=0,b=1e18;
line(int _k,int _b){k=_k,b=_b;}
int f(int x){return k*x+b;}
}t[N*4];
void update(int p,int l,int r,line c){
int m=l+r>>1;
if(c.f(m)<t[p].f(m))swap(c,t[p]);
if(c.f(l)<t[p].f(l))update(p*2,l,m,c);
if(c.f(r)<t[p].f(r))update(p*2+1,m+1,r,c);
}
int query(int p,int l,int r,int k){
if(l==r)return t[p].f(k);
int m=l+r>>1;
if(k<=m)return min(t[p].f(k),query(p*2,l,m,k));
else return min(t[p].f(k),query(p*2+1,m+1,r,k));
}

浙公网安备 33010602011771号