t4正解李超線段樹?不會,滾過來學
貌似思路並不是很難的亞子
我們可以使用權值線段樹!
對於每個區間,我們維護乙個最優線段
顯然對於乙個線段完全覆蓋的區間我們才處理
分四種情況討論:
直接賦值
直接賦值
直接滾粗
最複雜的情況,我們考慮將覆蓋該區間最長的線段保留為最優線段
欸嘿?怎麼搞呢?其實只需判斷該區間中點誰在上面就行了,中點位置在上面的線段一定是覆蓋最長的線段
然後把另外一條丟到下面去接著修改
插入時間複雜度\(o(\log^2 n)\)
一直往下走,對於每個走到的區間的最優線段求出乙個函式值,取\(\texttt\)即可
詢問時間複雜度\(o(\log n)\)
loj板題「雅禮集訓 2017 day2」線段遊戲
「雅禮集訓 2017 day2」線段遊戲
const int m = 1000001;
const int maxn = 2000005;
int n,q;
struct line
line(double k1,double b1,bool f1)
};#define lc (x<<1)
#define rc (x<<1|1)
double getf(line w,int x)
struct lichaosegmenttree
return;
} if(ql <= mid) add(lc,l,mid,ql,qr,w);
if(mid+1 <= qr) add(rc,mid+1,r,ql,qr,w); }
double query(int x,int l,int r,int q)
}st;
void addline()
int main()
} return 0;
}
李超線段樹
首先來看一道題 heoi2013 segment 可以發現的是,實質上某個 x k 處的最大值只有乙個,因此我們需要盡可能減少計算不優的線段。那麼對於兩條線段 a,b a ne b 它們左右端點橫座標相同,就只會產生如下四種情況 從特殊情況出發,每次我們都插入一條 1,n 的線段。如果是前兩條情況,...
李超線段樹
可以處理二維平面上加入線段,然後查詢單點最大值。首先我們定義乙個區間的最優勢線段,為區間中點值最大的線段,然後我們發現處理詢問,我們只需要將經過的線段樹節點上的最優勢線段對應的點值取max即可。然後考慮如何處理修改,首先將線段劃分到 o logn 個線段樹節點上。如果當前線段被最優勢線段完全覆蓋,那...
Segment 李超線段樹
要求在平面直角座標系下維護兩個操作 1.在平面上加入一條線段。記第 i 條被插入的線段的標號為 i 2.給定乙個數 k,詢問與直線 x k 相交的線段中,交點最靠上的線段的編號。若有多條線段符合要求,輸出編號最小的線段的編號 明顯的線段樹特徵 1.有固定的 區間長度,39989 2.插入元素支援合併...