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

2021-07-30 01:30:44 字數 981 閱讀 1524

題意: 最初1-2-3-…-n按照順序每個點與相鄰的和兩點相連成一條鏈。

三種操作d: 毀掉x r: 恢復上次毀掉的 q:查詢與x直接相連或者間接相鄰的數量(包括自己)

題目型別:線段樹求區間連續最大和的模板題目

思路:

維護區間從左端點開始最大連續個數lsum, 以及當前區間從右端點開始最大連續的個數rsum。重點push_up()函式的寫法。

查詢的時候 檢視當前點是否在子區間的rsum和lsum 範圍內,是的話答案就是它。找不到就是0。用棧來維護被摧毀的城市。

#include

using

namespace

std;

#define root 1,n,1

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

const

int n=5e4+10;

int lsum[n<<2],rsum[n<<2],sta[n],n,q;

void push_up(int rt,int m)

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

void update(int o,int v,int l,int r,int rt)

int m=l+r>>1;

if(o<=m) update(o,v,lson);

else update(o,v,rson);

push_up(rt,r-l+1);

}int query(int o,int l,int r,int rt)

if(o<=m) return query(o,lson);

else

return query(o,rson);

}int main()

else

else

printf("%d\n",query(x,root));}}

}}

hdu 1540 線段樹 最大連續區間

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

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

translation 打地道戰,n個村莊用地道連成一條直線,鬼子有時破壞掉乙個村莊,這時八路軍要修好這個據點。現在要求詢問任意乙個村莊,得出這個村莊現在與幾個村莊相連,包括它本身。solution 線段樹維護連續子區間 將村莊抽象成乙個點,正常下值為1,被破壞後變成0,即可將題目抽象成乙個求目標節...

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

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