bzoj3720 Gty的妹子樹

2021-07-10 17:32:07 字數 1206 閱讀 6564

我們可以樹上分塊,詳見我部落格中雜文下的根號演算法題庫

然後每個塊維護降序,對於整一塊在子樹內的就可以二分,其餘部分暴力。

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

const

int maxn=60000+10,maxc=10000;

int h[maxn],next[maxn*2],go[maxn*2],h2[maxn],n2[maxn],g2[maxn];

int belong[maxn],a[maxn],d[maxn],size[maxn],dl[maxn],ld[maxn];

int b[maxn][200];

int i,j,k,l,r,t,n,m,tot,top,cnt,t2,ans,c,wdc;

void add(int x,int y)

void add2(int x,int y)

void insert(int x,int y)

}void dfs(int x,int y)

else belong[x]=belong[y],insert(belong[y],x);

int t=h[x];

while (t)

}void find(int x,int y)

ans+=l;

}int main()

fo(i,1,n) scanf("%d",&a[i]);

dfs(1,0);

cnt=n;

scanf("%d",&m);

ans=0;

while (m--)

else

if (d[go[t]]>d[dl[l]]) ld[++wdc]=belong[go[t]];

t=next[t];

}l++;

}fo(i,1,wdc) dl[i]=ld[i];

l=1;r=wdc;

while (l<=r)

l++;

}printf("%d\n",ans);

}else

if (t==1)

}else

}a[j]=k;

}else}}

}

BZOJ3720 Gty的妹子樹

如果沒有插入操作,那麼直接對dfs序建立線段樹套平衡樹即可,有插入操作的話,將外層的線段樹換成重量平衡樹即可。一開始寫替罪羊樹套權值線段樹無限mle 所以只好寫替罪羊樹套treap include include includeusing namespace std typedef unsigned...

BZOJ3720 Gty的妹子樹

題目 題解 傳說中的塊狀樹。和鏈剖思想差不多,能塞到父親塊裡的就塞,否則自己新開一塊。只是比較糾結樹分塊究竟用什麼?如果是樹上莫隊的話好像不能這麼分?被菊花卡死?然後我們就每個塊暴力維護資訊。剛開始以為set就行了,到了寫查詢的時候發現尼瑪set是不能維護名次的t t 還是老老實實寫線性表吧。塊開s...

BZOJ 3720 Gty的妹子樹

bzoj 3720 傳送門 這時考慮在樹上分塊,具體內部的操作和在序列上相同 每次通過判斷父節點塊的大小判斷是否要新開一塊 注意每一塊在樹上都是連續的,這樣在查詢時子樹時保證最後全是整塊 不過由於上一條特性導致遇到菊花圖就將每一塊大小卡到了1 複雜度穩定的演算法其實是對修改操作進行分塊 每 sqrt...