CF811E 線段樹 並查集

2022-09-07 23:45:28 字數 1188 閱讀 1214

cf的題面真的是做的美美的,

所以就直接扔超連結了

分析:

線段樹的葉子結點維護一列的資訊

包括左右端點,有多少聯通塊,以及左右兩列的並查集情況

需要注意的是,

這次**中的update返回的是乙個node

第一次**re的原因就是在返回的這個新建的node中

我沒有維護左右端點

在update維護左右兩列的並查集時,

(160個點,懷疑人生。。。)

這裡寫**片

#include

#include

#include

using namespace std;

const int n=1e5+7;

struct node;

node tree[n<<2];

int n,m,q,mp[11][n];

int fa[n*11],tot=0;

int find(int a)

node update(int ll,int rr,node lc,node rc,int mid)

for (i=1;i<=n;i++)}}

for (i=1;i<=n;i++)

return ans;

}void build(int bh,int ll,int rr)

return;

}int mid=(ll+rr)>>1;

build(bh<<1,ll,mid);

build(bh<<1|1,mid+1,rr);

tree[bh]=update(tree[bh].x,tree[bh].y,tree[bh<<1],tree[bh<<1|1],mid);

}node ask(int bh,int ll,int rr)

int mid=(tree[bh].x+tree[bh].y)>>1;

if (rr<=mid) return ask(bh<<1,ll,rr);

else

if (ll>mid) return ask(bh<<1|1,ll,rr);

else

}int main()

return

0;}

0720 並查集 棧 CF 500 E

有n個多公尺諾骨牌,從左到右排列,每乙個骨牌都有乙個高度li,向右推倒,它會直接向右倒下,如下圖,倒下後該骨牌的頂端落在xi li的位置,xi是它位於的座標,即倒下時該骨牌不會發生移動 在倒下過程中,骨牌會碰到其他骨牌,碰到的骨牌會向右倒,如下圖,最左邊的骨牌倒下會碰倒a,b,c,a,b,c會倒下,...

紅綠 線段樹分治, 並查集

對 1,q to t 1,q tot 1,q t ot 進行線段樹分治,將每個 綠綠 的 影響區間分為 log q tot log q tot logq t ot個區間散布在線段樹節點中,其中 qto tq tot qt o t 為詢問的總數 然後對線段樹dfs dfsdf s,合併祖先鏈的和當前節...

線段樹 樹狀陣列 並查集

利用線段樹十分方便的處理區間,線段樹是一棵完美的二叉樹,樹上的每乙個節點都維護乙個區間,根維護的是整個區間,線段樹通常用來計算區間內資料的和或者是修改某處的值。對區間的操作可以再o logn 的時間內完成。下面我們通過 實現線段樹的構建,修改,區間求和。include include 線段樹 def...