Codeforces 722C 並查集 思維

2022-08-31 02:54:10 字數 825 閱讀 9868

思路:題目給的運算元從第 1 個到第 n 個數是刪除原陣列中的乙個數, 那麼反過來從後往前就是增加原陣列中的乙個數, 每增加乙個值, 那麼就有四種情況: 第一種和前後都不連續, 即自成乙個集合; 第二種:和前面的數連續, 即和前乙個數在乙個集合; 

第三種和之後乙個數連續, 即和之後的乙個數在乙個集合; 第四種既和前面乙個數連續也和後面乙個數連續,那麼說明前後兩個集合被這個數合併成乙個集合. 然後合併的時候維護每個集合的元素和 sum, 利用 max 記錄當前集合 sum 和新增集合的 sum 中的最大值.

**:

1 #include 2

3 typedef long

long

ll;4

const

int maxn = 100000;5

using

namespace

std;

6 ll pre[maxn + 3], cnt[maxn + 3], a[maxn + 3], pos[maxn + 3], visit[maxn + 3], ans[maxn + 3];7

8int find(int x) 910

void mix(int x, int

y) 14

15int

main()

22for(int i = 0; i < n; i++) cin >>pos[i];

23 ll maxn = 0;24

for(int i = n - 1; i >= 0; i--)

31for(int i = 0; i < n; i++) cout << ans[i] <32return0;

33 }

Codeforces 722E 組合數學 DP

題意 有乙個n m的棋盤,你初始在點 1,1 你需要去點 n,m 你初始有s分,在這個棋盤上有k個點,經過一次這個點分數就會變為s 2 向上取整 問從起點到終點的分數的數學期望是多少?思路 按照套路,先把這k個點按照pair的方式進行排序,設dp i j 為從起點到點i之前經過了至少j個減分點,到點...

codeforces 731C 並查集 水

題意 給出n只襪子的顏色,每天選擇兩隻襪子,每次能把乙隻襪子染色。問最少染色幾隻襪子能使的每天的襪子顏色一樣。給每天穿的兩隻襪子連邊,很顯然乙個分量的襪子要一起考慮,並查集維護分量就好了。然後搜出最多的顏色,把分量的點都染成這個顏色即可。include include include include...

CodeForces 455C (貪心,並查集)

題意 給出乙個n個點m條邊的森林,q次詢問,第一種詢問要求輸出乙個點所在樹的直徑,第二種詢問要求合併兩個點所在的樹。思路 先將初始的森林中各個樹的直徑求出來,然後用並查集維護。兩樹合併時,設直徑分別為len1,len2,新樹直徑為max len1,len2,len1 2 len2 2 len1 2 ...