傳送門
其實很裸,用並查集維護每個點的資訊已經別合併到哪個線段樹裡面了,然後權值線段樹查第k大就行。
我一開始和*****地沒用並查集,然後發現rt沒有傳遞性。
寫著寫著反應過來,,其實一開始也可以這麼寫,,用rt當並查集用就行,,我感覺更*****了。
#includeusing namespace std;
#define in read()
int in
while(isdigit(ch))return cnt*f;
}int n,m,rank[100003],rt[100003];
struct nodet[3000003];int tot;
void modify(int &u,int l,int r,int key)
int merge(int u,int v)int belong[100003];
int query(int u,int l,int r,int k)
int mid=(l+r)>>1,ls=t[t[u].l].size;
if(k<=ls)return query(t[u].l,l,mid,k);
else return query(t[u].r,mid+1,r,k-ls);
}void debug(int u,int l,int r)int fa[100003];
int find(int x)
signed main()int q=in;
for(int i=1;i<=n;i++)char ch[3];int x,y;
while(q--)
int gu=query(rt[x],1,n,y);//cout<<"gu "
} return 0;
}
線段樹合併 HNOI2012 永無鄉
問題 b hnoi2012 永無鄉 時間限制 1 sec 記憶體限制 128 mb 提交 50 解決 28 提交 狀態 討論版 題目描述 永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連...
HNOI2012 永無鄉 題解
對於每乙個點先建立乙個權值線段樹,之後並查集維護 更改連通性。不知道權值線段樹是啥的戳我 聯通就直接把祖先連起來然後合併線段樹 include include using namespace std const int n 100005 int size n 20 n,m,fa n type,q,r...
HNOI2012 永無鄉 splay合併
題目描述 永無鄉包含 n 座島,編號從 1 到 n 每座島都有自己的獨一無二的重要度,按照重要度可以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以 到達島 b 則稱島 a 和島 b 是連通的。...