bzoj2733 永無鄉 線段樹合併

2021-07-10 10:11:26 字數 915 閱讀 6496

這道題是一道經典的平衡樹+啟發式合併吧。那麼考慮用可持久化線段樹來寫。

對每乙個節點儲存一棵線段樹表示所在塊的編號的集合(因此可以乙個塊值儲存一棵樹),然後合併的時候就地櫃合併左子節點和右子節點,然後更新節點的值即可。時空複雜度o(nlogn)

ac**如下:

#include#include#include#define n 100005

#define m 2000005

using namespace std;

int n,m,trtot,a[n],id[n],fa[n],rt[n],sum[m],ls[m],rs[m];

int read()

return x;

}void ins(int &k,int l,int r,int v)

int mid=(l+r)>>1;

if (v<=mid) ins(ls[k],l,mid,v); else ins(rs[k],mid+1,r,v);

sum[k]=sum[ls[k]]+sum[rs[k]];

}int merge(int x,int y)

int qry(int k,int rst)

else

} return id[l];

}int getfa(int x)

int main()

while (m--)

for (i=1; i<=n; i++) ins(rt[getfa(i)],1,n,a[i]);

m=read(); char ch;

while (m--)

} else printf("%d\n",qry(rt[getfa(x)],y));

} return 0;

}

by lych

2016.3.10

BZOJ 2733 永無鄉 線段樹合併

time limit 10 sec memory limit 128 mb submit 3624 solved 1937 submit status discuss 永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n ...

BZOJ2733 永無鄉 線段樹合併

永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島 到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以到達島 b,則稱島 a 和島 b 是連 通的。現在有...

BZOJ2733 永無鄉 splay啟發式合併

作者部落格 永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島 到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以到達島 b,則稱島 a 和島 b 是連 ...