hdu1540(線段樹維護連續區間模型)

2021-07-24 18:01:13 字數 940 閱讀 1882

/*

translation:

打地道戰,n個村莊用地道連成一條直線,鬼子有時破壞掉乙個村莊,這時八路軍要修好這個據點。現在要求詢問任意乙個村莊,

得出這個村莊現在與幾個村莊相連,包括它本身。

solution:

線段樹維護連續子區間

將村莊抽象成乙個點,正常下值為1,被破壞後變成0,即可將題目抽象成乙個求目標節點所在的最長連續1序列的區間的長度。

note:

*:習得線段樹維護連續子區間的正確姿勢orz

date:

2016.11.19

*/#include #include #include using namespace std;

const int maxn = 50000 + 5;

int n, q;

int s[maxn*4], e[maxn*4];

int prelen[maxn*4], suflen[maxn*4], maxlen[maxn*4];

void build(int o, int l, int r)

}void pushup(int o)

void update(int o, int k, int v)

if(s[o] == e[o]) return;

int m = (s[o] + e[o]) >> 1;

if(k <= m) update(o << 1, k, v);

else update(o << 1 | 1, k, v);

pushup(o);

}int query(int o, int k)

else

}int main()

if(op == 'q')

if(op == 'r')

}} }

return 0;

}

hdu 1540 線段樹 最大連續區間

在區間中,有三種操作,q x 查詢包含x的最長連續區間 d x 將x點毀掉即x點左右不再連續 r 修復上一次毀壞的點 思路 記錄每個區間的左右端的連續區間長度,x若在左端點連續區間,則該區間只可能是其父親的右孩子,因為如果是左孩子,則訪問其父區間的時候,父區間的左連續區間便已包含x。所以直接將該右孩...

hdu1540(線段樹求連續區間最大和)

題意 最初1 2 3 n按照順序每個點與相鄰的和兩點相連成一條鏈。三種操作d 毀掉x r 恢復上次毀掉的 q 查詢與x直接相連或者間接相鄰的數量 包括自己 題目型別 線段樹求區間連續最大和的模板題目 思路 維護區間從左端點開始最大連續個數lsum,以及當前區間從右端點開始最大連續的個數rsum。重點...

HDU 1540 線段樹 區間合併 最大連續區間)

做kuangbin線段樹專題的時候遇到的題目,感覺這是一道非常有趣的題目。線段樹的題目做的比較少,沒有見過這種通過線段樹在區間上做文章的題目,感覺做完這個題目之後加深了對線段樹左右孩子所覆蓋的區間之間的關係的認識。題意 1 n個地道,m個次操作,d代表摧毀第i個地道,q代表查詢包含第i個地道的最大連...