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...