康拓展開和逆康拓展開

2022-05-31 16:51:10 字數 1067 閱讀 5692

康拓展開模板題

複雜度o(\(n^2\))的會tle(看資料就知道了)(雖然某題解說可以,不知道是不是後期加強了資料

然而我還是寫了o(\(n^2\))的

#include typedef long long ll;

ll f[1000010];

const ll mod = 998244353;

int a[1000010], b[1000010];

int main()

ll ans = 1, cnt;

for(int i = 0; i < n; i++)

b[a[i]] = 1;

ans = ans % mod + cnt * f[n - i - 1];

}printf("%lld\n", ans % mod);

}return 0;

}

下面這個是樹狀陣列實現的,複雜度o(nlogn) (能過)

#include typedef long long ll;

ll f[1000010];

const ll mod = 998244353;

int a[1000010], n, bit[1000010];

void add(int i, int x)

}int query(int i)

return res;

}int main()

ll ans = 1, cnt;

for(int i = 1; i <= n; i++)

printf("%lld\n", ans % mod);

return 0;

}

逆康拓展開o(\(n^2\))

#include #include int main() 

if(b[j] == 0) cnt++;

}k = k % f[i];

}printf("\n");

}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位在當前未出現的元素中是排在第幾個 康拓展開是乙個雙射,因此常用...

康拓展開與康拓展開的逆

康拓展開一般是用於計算乙個全排列數字排在所有全排列的大小位置。那麼到底怎麼計算呢?敲重點 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 1 從第乙個數字開始到倒數第二個數字,計算需要計算的那個數字之後比這個數小的數字有幾個,再乘以 n x n是全排列的 數字,x是當...