青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 87  文章 - 279  trackbacks - 0
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 219409
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

The k-th Largest Group
Time Limit:2000MS? Memory Limit:131072K
Total Submit:1222 Accepted:290

Description

Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is really huge, Newman wants to group some of the cats. To do that, he first offers a number to each of the cat (1, 2, 3, …, n). Then he occasionally combines the group cat i is in and the group cat j is in, thus creating a new group. On top of that, Newman wants to know the size of the k-th biggest group at any time. So, being a friend of Newman, can you help him?

Input

1st line: Two numbers N and M (1 ≤ N, M ≤ 200,000), namely the number of cats and the number of operations.

2nd to (m + 1)-th line: In each line, there is number C specifying the kind of operation Newman wants to do. If C = 0, then there are two numbers i and j (1 ≤ i, jn) following indicating Newman wants to combine the group containing the two cats (in case these two cats are in the same group, just do nothing); If C = 1, then there is only one number k (1 ≤ k ≤ the current number of groups) following indicating Newman wants to know the size of the k-th largest group.

Output

For every operation “1” in the input, output one number per line, specifying the size of the kth largest group.

Sample Input

10 10
0 1 2
1 4
0 3 4
1 2
0 5 6
1 1
0 7 8
1 1
0 9 10
1 1

Sample Output

1
2
2
2
2

Hint

When there are three numbers 2 and 2 and 1, the 2nd largest number is 2 and the 3rd largest number is 1.

Source
POJ Monthly--2006.08.27, zcgzcgzcg

#include? < iostream >
using ? namespace ?std;
const ? int ?MAXN? = ? 200001 ;

class ?UFset
{
public :
????
int ?parent[MAXN];
????UFset();
????
int ?Find( int );
????
void ?Union( int ,? int );
}
;

UFset::UFset()
{
????memset(parent,?
- 1 ,? sizeof (parent));
}


int ?UFset::Find( int ?x)
{
????
if ?(parent[x]? < ? 0 )
????????
return ?x;
????
else
????
{
????????parent[x]?
= ?Find(parent[x]);
????????
return ?parent[x];
????}
// ?壓縮路徑
}


void ?UFset::Union( int ?x,? int ?y)
{
????
int ?pX? = ?Find(x);
????
int ?pY? = ?Find(y);
????
int ?tmp;
????
if ?(pX? != ?pY)
????
{
????????tmp?
= ?parent[pX]? + ?parent[pY];? // ?加權合并
???????? if ?(parent[pX]? > ?parent[pY])
????????
{
????????????parent[pX]?
= ?pY;
????????????parent[pY]?
= ?tmp;
????????}

????????
else
????????
{
????????????parent[pY]?
= ?pX;
????????????parent[pX]?
= ?tmp;
????????}

????}

}


int ?f[(MAXN + 1 ) * 3 ]? = ? { 0 } ;
int ?n,?m;

void ?initTree()
{
????
int ?l? = ? 1 ,?r? = ?n;
????
int ?c? = ? 1 ;
????
while ?(l? < ?r)
????
{
????????f[c]?
= ?n;
????????c?
= ?c? * ? 2 ;
????????r?
= ?(l? + ?r)? / ? 2 ;
????}

????f[c]?
= ?n; // 葉子初始化
}


void ?insertTree( int ?k)
{
????
int ?l? = ? 1 ,?r? = ?n;
????
int ?c? = ? 1 ;
????
int ?mid;

????
while ?(l? < ?r)
????
{
????????f[c]
++ ;
????????mid?
= ?(r? + ?l)? / ? 2 ;
????????
if ?(k? > ?mid)
????????
{
????????????l?
= ?mid? + ? 1 ;
????????????c?
= ?c? * ? 2 ? + ? 1 ;
????????}

????????
else
????????
{
????????????r?
= ?mid;
????????????c?
= ?c? * ? 2 ;
????????}

????}

????f[c]
++ ; // 葉子增加1
}


void ?delTree( int ?k)
{
????
int ?l? = ? 1 ,?r? = ?n;
????
int ?c? = ? 1 ;
????
int ?mid;

????
while ?(l? < ?r)
????
{
????????f[c]
-- ;
????????mid?
= ?(r? + ?l)? / ? 2 ;
????????
if ?(k? > ?mid)
????????
{
????????????l?
= ?mid? + ? 1 ;
????????????c?
= ?c? * ? 2 ? + ? 1 ;
????????}

????????
else
????????
{
????????????r?
= ?mid;
????????????c?
= ?c? * ? 2 ;
????????}

????}

????f[c]
-- ; // 葉子減少1
}


int ?searchTree( int ?k)
{
????
int ?l? = ? 1 ,?r? = ?n;
????
int ?c? = ? 1 ;
????
int ?mid;

????
while ?(l? < ?r)
????
{
????????mid?
= ?(l? + ?r)? / ? 2 ;
????????
if ?(k? <= ?f[ 2 * c + 1 ])
????????
{
????????????l?
= ?mid? + ? 1 ;
????????????c?
= ?c? * ? 2 ? + ? 1 ;
????????}

????????
else
????????
{
????????????k?
-= ?f[ 2 * c + 1 ];
????????????r?
= ?mid;
????????????c?
= ?c? * ? 2 ;
????????}

????}

????
return ?l;
}


int ?main()
{
????
int ?i,?j;
????
int ?x,?y;
????
int ?k;
????
int ?l,?r;
????
int ?cmd;
????
int ?px,?py;
????
int ?tx,?ty,?tz;
????UFset?UFS;

????
????scanf(
" %d%d " ,? & n,? & m);
????initTree();
????
for ?(i = 0 ;?i < m;?i ++ )
????
{
????????scanf(
" %d " ,? & cmd);
????????
if ?(cmd? == ? 0 )
????????
{
????????????scanf(
" %d%d " ,? & x,? & y);
????????????px?
= ?UFS.Find(x);
????????????py?
= ?UFS.Find(y);
????????????
if ?(px? != ?py)
????????????
{
????????????????tx?
= ? - UFS.parent[px];
????????????????ty?
= ? - UFS.parent[py];
????????????????tz?
= ?tx? + ?ty;
????????????????UFS.Union(x,?y);
????????????????insertTree(tz);
????????????????delTree(tx);
????????????????delTree(ty);
????????????}

????????}

????????
else
????????
{
????????????scanf(
" %d " ,? & k);
????????????printf(
" %d\n " ,?searchTree(k));
????????}

????}

????
return ? 0 ;
}
posted on 2006-09-06 13:28 閱讀(821) 評論(4)  編輯 收藏 引用 所屬分類: ACM題目

FeedBack:
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-22 13:24 A3
可否講解一下線段樹部分  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-22 17:47 
把區間劃出來, 節點(非葉子), 表示該區間里面含有多少個元素。
如果 n = 10;
而集合大小分別是 1, 1, 2, 6;

則 區間(1-10) = 4; 區間(1-5) = 3;

就這樣用線段樹動態維護每次集合合并后的集合大小。

初始化(1-10) = 10;
因為開始時, 集合大小為1, 1, 1, 1, 1, 1, 1, 1, 1, 1  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-24 19:53 Optimistic
偶的第一次呢 靜待。。。  回復  更多評論
  
# re: pku2985 第一次用兩種數據結構解題, 并查集+線段樹 2006-09-24 22:23 
+U ^_^  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久久久国产一区二区三区| 中文精品99久久国产香蕉| 亚洲伊人色欲综合网| 欧美日韩一区二区三区在线 | 亚洲区一区二| 久久免费观看视频| 久久久久久久久久久成人| 亚洲成人影音| 亚洲国产另类久久精品| 欧美激情一区二区三区成人| 99精品视频免费观看| 一本色道久久综合一区| 国产麻豆视频精品| 久久这里只有精品视频首页| 欧美不卡视频| 亚洲一区精品电影| 久久成人精品视频| 亚洲欧洲综合另类| 亚洲无人区一区| 狠狠色丁香久久综合频道| 亚洲第一色在线| 欧美视频在线看| 久久精品视频网| 欧美电影免费网站| 午夜亚洲性色视频| 免费视频一区| 国产精品成人一区二区艾草| 亚洲精品在线观看免费| 亚洲主播在线观看| 在线电影欧美日韩一区二区私密| 日韩视频一区二区在线观看 | 久久福利毛片| 午夜在线精品| 亚洲国产精品视频| 一区二区毛片| 亚洲第一在线综合网站| 亚洲欧美日韩国产成人精品影院| 奶水喷射视频一区| 欧美三级日本三级少妇99| 久久免费少妇高潮久久精品99| 一本久久a久久免费精品不卡| 久久视频精品在线| 亚洲一区二区三区乱码aⅴ| 久久久一区二区| 午夜精品视频| 欧美喷水视频| 美日韩精品视频免费看| 国产欧美精品在线| 亚洲国产日韩精品| 在线观看亚洲一区| 亚洲专区免费| 亚洲综合首页| 欧美日韩国产高清| 欧美激情va永久在线播放| 国产主播在线一区| 亚洲天堂免费观看| 中文日韩欧美| 欧美日韩国产综合视频在线观看 | 欧美日韩情趣电影| 欧美激情一区二区三区成人| 国外成人网址| 欧美一区二区三区精品| 小黄鸭视频精品导航| 欧美日韩免费观看中文| 亚洲欧洲在线观看| 亚洲精品日韩欧美| 欧美国产免费| 欧美激情中文字幕在线| 在线国产日韩| 欧美成人r级一区二区三区| 欧美成人一区二区三区| 在线观看久久av| 久久综合中文| 欧美黄免费看| 亚洲三级毛片| 欧美片第一页| 亚洲作爱视频| 午夜国产精品影院在线观看| 国产精品久久久久久久久久免费看| 午夜精品久久久久久久久久久久久| 亚洲欧美欧美一区二区三区| 香蕉成人伊视频在线观看| 国产精品羞羞答答xxdd| 午夜一区不卡| 久久久噜噜噜久久中文字幕色伊伊| 免费在线观看精品| 亚洲狼人精品一区二区三区| 亚洲影音一区| 国产午夜亚洲精品理论片色戒| 欧美国产日韩精品| 洋洋av久久久久久久一区| 欧美日韩蜜桃| 午夜精品视频| 久久久久久亚洲综合影院红桃| 欧美精品在线观看播放| 亚洲国产精彩中文乱码av在线播放| 欧美色播在线播放| 亚洲影视九九影院在线观看| 久久久久久久久久看片| 在线成人激情黄色| 欧美精品免费视频| 亚洲一区精品视频| 欧美高清你懂得| 亚洲一区二区三区久久| 在线观看91精品国产麻豆| 欧美精品电影| 久久成人国产| 亚洲电影在线观看| 欧美在线黄色| 亚洲日本无吗高清不卡| 国产精品一区二区三区久久| 免费在线亚洲| 亚洲欧美日韩人成在线播放| 欧美激情片在线观看| 校园春色国产精品| 亚洲日本电影| 很黄很黄激情成人| 欧美欧美全黄| 久久久久久亚洲精品杨幂换脸| 欧美影院一区| 99re成人精品视频| 精品96久久久久久中文字幕无| 亚洲欧美国内爽妇网| 亚洲高清资源| 久久综合国产精品| 亚洲欧美一区二区视频| 亚洲精品一二三| 激情欧美日韩一区| 国产一区二区av| 国产精品高潮呻吟久久av无限| 亚洲久久成人| 欧美二区不卡| 另类图片国产| 久久久免费精品视频| 欧美一级一区| av成人黄色| 亚洲精品日韩在线| 亚洲三级网站| 亚洲国产精品久久久久秋霞不卡 | 亚洲视频一区二区在线观看 | 国产午夜精品视频| 国产精品v欧美精品∨日韩| 欧美激情五月| 欧美另类在线播放| 欧美紧缚bdsm在线视频| 欧美国产日韩一二三区| 欧美ed2k| 欧美成人午夜免费视在线看片| 亚洲日本激情| 亚洲第一成人在线| 亚洲激情婷婷| 亚洲黄色一区二区三区| 欧美激情一区二区三区全黄 | 欧美性猛交视频| 欧美日韩另类丝袜其他| 欧美色图首页| 国产精品美女www爽爽爽| 欧美日韩国产在线看| 欧美视频三区在线播放| 国产精品麻豆va在线播放| 国产伦精品一区二区三区照片91| 欧美在线精品一区| 久久精品五月| 欧美高清在线播放| 欧美日韩免费观看一区三区 | 亚洲精品一二区| 亚洲精品一区二区网址| 亚洲视频图片小说| 欧美中文字幕在线观看| 久久久一区二区三区| 欧美激情一区二区三区全黄 | 免费在线观看精品| 亚洲国产乱码最新视频| 99人久久精品视频最新地址| 亚洲欧美视频在线观看| 久久精品人人| 欧美激情一区二区在线| 国产精品亚洲а∨天堂免在线| 欧美成人精品激情在线观看| 欧美高清不卡| 国产欧美在线视频| 亚洲国产日日夜夜| 欧美亚洲一区二区在线| 久久婷婷国产综合尤物精品| 亚洲黄色成人久久久| 亚洲综合国产精品| 蜜臀a∨国产成人精品| 欧美性久久久| 亚洲国产精品va在线观看黑人| 国产欧美日韩综合一区在线播放| 欧美成人精品一区二区三区| 国产精品www| 最新国产拍偷乱拍精品| 亚欧成人在线| 亚洲国产一区在线| 欧美在线观看你懂的| 欧美视频在线免费看| 在线播放亚洲一区| 欧美亚洲系列| 夜夜嗨av一区二区三区|