2020牛客多校第五場 D

2021-10-23 10:16:51 字數 929 閱讀 3241

題意,有兩個操作,求你最少使用的段數(連續使用1操作包括1次也稱為1段)

對於操作1: 我們可以把 1~n-1看成是乙個環,操作一次,環轉一次。

對於操作2: 我們可以把1~n 看成是乙個環,操作一次,環轉一次。

每使用多次包括1次操作1 之後 再使用多次包括1次操作2 ,就可以把某些數放到最後乙個數的後面,即把最後乙個數插入到某個位置,再擴充套件,就是把某個數(操作2免費哦)插入到任意位置。

這裡用 nlogn 求上公升子串行

**:

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

#include

#define int long long

using

namespace std;

typedef pair<

int,

int> pii;

typedef

long

long ll;

const

int inf =

0x3f3f3f3f

;const

double eps =

1e-4

;const

int mod =

998244353

;const

int n =

200010

;int a[n]

,n;int

slove

(int sa)

return n-

(int

)ve.

size()

;}signed

main()

2020牛客多校第五場H

乙個數轉為二進位制後,最多有log位,所以減小後的個數最多只有log位,加上二分,複雜度為平方級的,主席樹也是log級的,所以總複雜度為 nlog2n mlogn 可能常數偏大 ac include include include include include include include de...

2020牛客多校第五場D Drop Voicing

給定乙個長度為n的排列,每次可以做兩個操作 1 把排列倒數第二個數放到第一的位置 2 把第乙個數放到最後乙個位置 連續的操作1視作一次操作。問最少需要幾次操作才能把排列變為全部公升序。即12345678 操作2可看作改變排列的順序,相當於在圓上繞圈圈,操作1可改變排列的本質。所以只需要每次進行操作2...

牛客多校(第五場)E room

將乙個房間當做乙個點,後來的房間與之前的房間中不用搬的人作為權值,建圖,跑最大權匹配,就是不用搬的人數,在減一下即可,km演算法,o n 3 include include include includeusing namespace std define n 200 define inf 0x3f...