將樹分塊,保證每塊內都聯通,然後保證每塊內都有序,就可以支援查詢操作了。
加入節點的時候,如果達到塊的大小就重建乙個塊,否則加入當前塊,不要忘記加入後對塊排序!
#include
#include
#include
#include
using
namespace
std;
const
int n=60005;
int head[n],list[n<<1],next[n<<1];
int head[n],list[n<<1],next[n<<1];
int a[n],fa[n],belong[n];
int n,m,cnt,ans,cnt,tot,b;
struct node
inline
void change(int x,int y)
inline
int query(int x)
};node block[10005];
inline
int read()
while (c>='0'&&c<='9')
return a*f;
}inline
void insert(int x,int y)
inline
void insert(int x,int y)
void dfs(int x)
void dfs1(int x,int y)
void query(int x,int y)
}int main()
for (int i=1;i<=n;i++) a[i]=read();
dfs(1);
for (int i=0;i<=tot;i++)
sort(block[i].a+1,block[i].a+block[i].size+1);
m=read();
for (int i=1;i<=m;i++)
else
if (opt==1)
else}}
return
0;}
BZOJ 3720 Gty的妹子樹 塊狀樹
題目大意 維護一棵樹,每個點有乙個權值,提供下列操作 1.詢問某棵子樹中有多少個節點的權值大於x 2.修改某個節點的權值 3.增加乙個葉子節點 傳說中的樹分塊 首先dfs,對於每個節點,如果這個節點的父親節點所在塊未滿,就塞進父節點所在塊中,否則自成一塊,然後與父節點所在的塊連邊 新增節點同理 然後...
bzoj3720 GTY的妹子樹 塊狀樹模板
圓方樹上塊狀果,點分樹下你和我,虛樹下面做遊戲,仙人掌上歡樂多 這道題題目很長 大概說的是 要求你寫出乙個資料結構,維護一顆帶點權的樹,茲瓷 1.單點修改點權 2.查詢子樹內點權大於x的點的個數 3.新給出乙個點,並將這個點與已有點做link 似乎以前學過的任何資料結構都不能做這麼奇怪的事情呢 我們...
bzoj3720 Gty的妹子樹
我們可以樹上分塊,詳見我部落格中雜文下的根號演算法題庫 然後每個塊維護降序,對於整一塊在子樹內的就可以二分,其餘部分暴力。include include include include define fo i,a,b for i a i b i using namespace std const i...