傳送門:
剛開始背的式子,一測wawawa......(式子背錯了.....
然後請教了下大佬。
就考慮比當前排列字典序小的有哪些。
第i個位置,後邊剩下n-i個位置沒有填,所以(n-i)!
考慮第i個位置,就再乘以( i-ask(a[i]) ) ask(a[i])為再i位置之前出現的比a[i]小的數的個數。(用樹狀陣列維護
#include#define r registertypedefview codelong
long
ll;using
namespace
std;
const
int mod=998244353
;int n,a[1001000],c[1001000
];inline
void add(int
x)inline
int ask(int
x)ll rev[
1001000
],ans;
inline
int abc(int
x)int
main ()
for(r int i=1;i<=n;i++)
printf(
"%lld\n
",(ans+1)%mod);
return0;
}
康拓展開 P5367 模板 康托展開
舉個栗子大家應該就能懂了 我現在生成了1 5的全排列,求數列5 2 3 1 4是第幾個 5 有四個數比他小,他後面還有4個數,所以他的貢獻應該是4 4!2 有乙個數比他小,他後面還有3個數,所以他的貢獻應該是1 3!3 有兩個數比他小,他後面還有兩個數,但是其中2在前面出現過了,所以他的貢獻應該是1...
洛谷 P5367 模板 康托展開
題目 首先我們要知道康托展開的公式 即 rand a i 1 n i 1 i n rand i 表示i在之前序列中未出現的第幾個 n i 我們可以用o n 的複雜度預處理出來。辣麼rand i 我們怎麼求呢?如果暴力列舉鐵定超時。我們想想可以用什麼來查詢,我們可以用樹狀陣列來查詢 看演算法標籤 in...
模板 康托展開
搜尋有時會用到的康托展開與康托收攏 第一行,兩個整數n和m,n表示數字1到n構成的全排列,m表示詢問數 接下來m行,表示詢問,每行兩個整數x和y,x 1表示第一種詢問,回答y的排名 x 2表示第2種詢問,答出排名為y的數字 include define int long long using nam...