CSU 1409 集合的並

2022-09-24 02:27:10 字數 1444 閱讀 5082

給出兩個由整數組成的集合a,

b,計算a

∪ b中包含多少個整數。輸入的第一行包含乙個整數t (t > 0),表示一共有t組測試資料。

對於每組測試資料,第一行包含乙個整數n (1

≤ n ≤ 105)。第二行包含2n個整數a1,

b1,a2,

b2, ...,

an,bn (0 <

a1≤

b1 <

a2≤

b2 < ... <

an≤

bn < 109),表示a

= [a1,

b1]∪ [a2,

b2]∪ ...

∪ [an,

bn]。第三行包含乙個整數m

(1 ≤

m ≤ 105)。第四行包含2m個整數c1,

d1,c2,

d2, ...,

cm,dm (0 <

c1≤

d1 <

c2≤

d2 < ... <

cm≤

dm < 109),表示b

= [c1,

d1]∪ [c2,

d2]∪ ...

∪ [cm,

dm]。

這裡[x,

y]表示由x,

y之間(包含x,

y)所有整數組成的集合。對於每組測試資料,輸出a

∪ b中包含多少個整數。3

17 7

13 3

21 2 3 4

12 3

21 2 4 6

31 3 6 7 9 102

49對樣例1的解釋:a = ,b = ,a

∪ b = 。

對樣例2的解釋:a = ,b = ,a

∪ b = 。

對樣例3的解釋:a = ,b = ,a

∪ b = 。

中南大學第八屆大學生程式設計競賽

//可以把a,b,都當成多條線段的集合,然後,排序,去重,那麼最後結果就是問所有的線段包含了多少個整數。通過結構體把a,b繫結起來,然後排序,先按左邊小的排,在按右邊大的排,這樣是為了覆蓋重複的。

#include

#include

#include

using namespace std;

const int maxn=200005;

int n,m;

struct point

f[maxn];

bool mycomp(const point &a,const point &b)

void solve()

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

}int main()

{ int t,i;

scanf("%d",&t);

while(t--)

{scanf("%d",&n);

for(i=0;i

NC15167 集合問題(並查集)

這道題目思維量還是挺大的,因為這道題也是維護集合關係,所以我們想到用並查集去維護。我們應該想到的是,用map對映一下位置,因為原來的資料比較大,不宜維護並查集關係,並且設計兩個原點 0 和n 1,表示ab集合,這招是常見手段,因為這兩個點是特殊的。之前有到異或並查集也是設計乙個另外的原點 又因為x和...

L2 005 集合相似度 (25 分)(集合求並)

l2 005 集合相似度 25 分 思路 不相同就是去除重複,然後兩個集合的相似度就是它們的交集 並集。c 提供了set函式可以很簡單的求出集合的交集合併。具體函式使用 所以先插入集合,然後求交集就好了。include include include include include includeu...

P1621 集合 尤拉篩 並查集

題目鏈結 這個題要求我們在乙個區間 a,b 中找出幾個集合,集合中的數滿足是乙個大於等於p的質因數的個數。看到集合這個定義,我們瞬間會想到用並查集來維護這個集合,那麼對於這個集合,他滿足乙個性質,就是如果我們,起始的時候初始化每乙個數的父親都是自己,那麼每乙個集合中有且只有乙個數的父親 是自己。根據...