題解 康拓展開 養生題

2022-02-23 20:38:11 字數 1015 閱讀 2135

養生養生

編號題目

狀態分數

總時間記憶體

** / 答案檔案

提交者提交時間

#528662

#167.康托展開

accepted

1001129 ms

8060 k

c++ 11 (clang)/ 1.2 k

winlere

2019-07-17 8:29:28

假如說我的排列是這樣的

\[2 \quad3 \quad4\quad5\quad1

\]可以從左往右掃,掃到第乙個時,發現這個位置不是\(1\),而是\(2\),說明至少經歷了\((2-1)\times (5-1)!\)次排列才可能第乙個是\(2\)。把第乙個判斷完之後,就剩下了乙個子排列,是個子問題。不過要動態維護每個數在當前剩下的數的排名,開個值域線段樹就好了。

//@winlere

#include#include#include#includeusing namespace std; typedef long long ll;

inline int qr()

const int mod=998244353;

const int maxn=1e6+5;

int jc[maxn],n;

int data[maxn];

#define lowbit(x) ((x)&(-(x)))

inline void add(const int&pos,const int&ad)

inline int q(const int&pos)

inline void add(const int&l,const int&r,const int&ad)

int main()

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

return 0;

}

康拓展開和逆康拓展開

康托展開就是一種特殊的雜湊函式 把乙個整數x展開成如下形式 x a n n a n 1 n 1 a 2 2 a 1 1 其中,a為整數,並且0 a表示1,2,3,n的排列如 按從小到大排列一共6種,就是123 132 213 231 312 321 代表的數字 1 2 3 4 5 6 也就是把10進...

康拓展開與逆康拓展開

首先解釋一下,所謂的康拓展開,就是能夠通過乙個式子,得到乙個排列在所有排列中的按字典序排好後的位次。而逆康托展開,則是給出排列的位次,能夠計算出排列是什麼。下面先給出康拓展開的公式 其中ai 為整數,並且 0 ai ai表示原數的第 i位在當前未出現的元素中是排在第幾個 康拓展開是乙個雙射,因此常用...

康拓展開和逆康拓展開

康拓展開模板題 複雜度o n 2 的會tle 看資料就知道了 雖然某題解說可以,不知道是不是後期加強了資料 然而我還是寫了o n 2 的 include typedef long long ll ll f 1000010 const ll mod 998244353 int a 1000010 b ...