京师后人

P3081 [USACO13MAR] Hill Walk G

summ1t @ 2024-11-03 20:27:08

李超线段树做法,如果你离散化之后各种 WA,请检查一下 INF 是否开的足够大,以及李超线段树上的计算,请用离散化之前的数来计算。

比如 update:

void update(int u,int l,int r,int id){
    int &g=seg[u],mid=(l+r)>>1;
    if(cmp(cal(id,lsh[mid]),cal(g,lsh[mid]))==1) swap(g,id);//lsh[mid],不是mid
    if(cmp(cal(id,lsh[l]),cal(g,lsh[l]))==1) update(u<<1,l,mid,id);
    if(cmp(cal(id,lsh[r]),cal(g,lsh[r]))==1) update(u<<1|1,mid+1,r,id);
}

|