題意,有兩個操作,求你最少使用的段數(連續使用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...