Hotel 線段樹區間合併模板題

2021-09-26 07:01:52 字數 800 閱讀 1308

有n個車位,一開始全是空的。m個要求,1 k,表示有k輛車要停,且位置要連續,找到編號最小的位置輸出,如果停不下,就輸出0;2 x k,表示從x位置開始,有連續k輛車開走。

1代表有空位,0代表沒有空位。tr[m].left代表從左端點向右,連續1的區間長度,tr[m].right代表從右端點向左連續1的區間長度,tr[m].all代表整個區間內最長連續1的區間長度。

#include #include #include #include using namespace std;

const int n = 50010;

int n, m;

struct nodetr[n<<2];

void pushup(int m)

void pushdown(int m)

}void build(int m, int l, int r)

void updata(int m, int l, int r, int val)

pushdown(m);

int mid = (tr[m].l + tr[m].r) >> 1;

if(r <= mid)

updata(m<<1, l, r, val);

else if(l > mid)

updata(m<<1|1, l, r, val);

else

pushup(m);

}int query(int m, int len)

int main()

}else

}} return 0;

}

POJ 3667 Hotel 線段樹區間合併

這道題應該算是比較經典的線段樹了 題意是 這座巨型賓館在一條超長走廊上有n 1 n 50000 個排成一排的房間,每個房間都能欣賞到蘇必利爾湖的好景色。現在所有的房間都是空的。現在bessie等旅客們正在不斷地發出訂房和退房要求。你需要接受m 1 m 50000 條指令 每條指令的第乙個數字為1或2...

poj3667 Hotel 線段樹 區間合併

題意 有乙個旅館初始有n個空位置,操作一找連續空位置長度為l的最左端,如果不存在輸0。操作二從 a,a b 1 區間的位置重新 置為空。思路 線段樹區間合併。線段樹維護四個資訊 1 區間連續為空地最長長度 2 從區間左端連續空地最長長度 3 從區間右端向左 連續空的最長長度 4 區間的懶惰標記 pu...

POJ 3667 hotel 線段樹區間合併

有n房間,序號1 n,m次詢問,詢問 1 b 代表入住b人,你需要找一段連續的6間房間,若有返回序號最小的房間序號,若沒有,返回0 詢問 2 b c 代表清理房間b c,清理之後b c房間可以入住。思路 記錄某區間的最大連續房間個數 區間從左邊第乙個開始的連續空房間個數,右邊最後乙個往前連續的空房間...