Hdu 5200 Trees (離線線段樹)

2021-06-29 16:46:42 字數 556 閱讀 9929

題目大意:

校門外栽滿了不同高度的樹,每一次詢問是 如果砍掉所有高度不超過q的樹,那麼還有多少個連續的塊。

思路分析:

記錄左連續和   右連續和  用來維護區間的連續塊的數量。

即seg[num] = seg[num<<1]+seg[num<<1|1] ;

如果中間部分連起來  那麼減一即可。

#include #include #include #include #define maxn 50005

#define lson num<<1,s,mid

#define rson num<<1|1,mid+1,e

#define mid ((s+e)>>1)

using namespace std;

int lsum[maxn<<2],rsum[maxn<<2],seg[maxn<<2];

struct tree{

int height;

int pos;

bool operator < (const tree &cmp)const{

return height

HDU 3333 離線線段樹

線段樹 給定乙個序列,求區間出現的數的數值和,若有多個,只計算一次 先離散化存數資料 對詢問區間按右節點排序,這樣我們每次維護的都是從前到當前位置,保證其重複元素不累加 跟新節點,對於之前出現過的刪除,並在新位置新增 然後查詢即可 include iostream include algorithm...

HDU 3874 離線線段樹

統計區間內所有數字和,對於重複出現的只統計一次 線段樹的離線演算法 按結束座標排序,然後掃一遍,遇到重複的,就把之前插入線段樹的給刪掉 include stdio.h include string.h include algorithm using namespace std struct node...

hdu4630 hdu4638 線段樹離線操作

兩題都是樸素想法列舉兩個端點o n 2 超時,那麼列舉其中乙個端點用線段樹維護另乙個端點。關鍵在於沒插入乙個端點後都是成段更新,否則又會退化到o n 2 ps 兩題用c 交都比g 快500ms以上。include include include include include includeusin...