acw4412 構造陣列 區間合併or並查集

2022-10-10 07:36:09 字數 1152 閱讀 8118

4412. 構造陣列-區間合併or並查集

題目大意:

有兩個數列,給數列a和b,a已知,b未知。若ai==aj則表示在b數列中[i,j]區間所有數相等。現在b[0]=0,問b陣列有多少種可能。

思路和**:

比較好想,只要看a有幾個區間,答案就是2^(x-1)。

這題給出兩種做法,區間合併並查集

//區間合併做法

/*先對所有區間按照左端點排序,再去合併

合併時有三種情況:

now: s----------e

1===> l---r

2===> l-------------r

3===> l-----r

其中情況1和情況2只要更新e值,情況3要更新整個區間。

*/void merge(vct&seg)) ;

st = s.fi ;

ed = s.se ;

}else ed = max(ed , s.se) ;

} seg = res ;

}void solve3()else ed[tmp] = i ; }

vctseg ;

for(auto it : num)) ; }

merge(seg) ;

cout << quick_pow(2 , seg.size() - 1 , 998244353) ;

}

//並查集做法

/*將乙個區間所有點放到其右端點

注意 1***2***1xx2 是乙個區間的特殊情況

*/int find(int u , vct&fa)

aisle

void solve2()else }

ll num = n ;

int i = 1 ;

while(i <= n)else

j ++ ;

}i = j ;

} }cout << quick_pow(2 , num - 1 , 998244353) << "\n" ;

}

小結:

陣列 合併區間 簡單

描述 給出若干閉合區間,合併所有重疊的部分。您在真實的面試中是否遇到過這個題?是 樣例given intervals merged intervals 1,3 1,6 2,6 8,10 8,10 15,18 15,18 挑戰 o n log n 的時間和 o 1 的額外空間。題目鏈結 分析 對int...

陣列與排序 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。class ...

LeeCode 中等 陣列 56 合併區間

中等陣列 給出乙個區間的集合,請合併所有重疊的區間。輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。from typing...