日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

康拓展开学习笔记

發(fā)布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 康拓展开学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

康拓展開

?


?

  給出一個全排列,求他是第幾個全排列稱為康拓展開。

?

暴力康拓展開

  對于一個全排列來說,從左往右第i位,有 n + 1 - i 種選擇。如果用變進制數(shù)表示的話,這一位就是 n + 1 - i 進制的數(shù),如果這一位選擇了第k種情況,那么對應的這一位就是k。(k從0開始)

  比如:1 4 5 2 3 6 變成變進制數(shù)就是(022000)

  • 首位1 是6種選擇的第一種{1, 2, 3, 4, 5, 6},所以變?yōu)?。
  • 次位4 是5種選擇的第三種{2, 3, 4, 5, 6},所以變?yōu)?。
  • 次位5 是4種選擇的第三種{2, 3, 5, 6},所以變?yōu)?。
  • 次位2 是3種選擇的第一種{2, 3, 6},所以變?yōu)?。
  • 次位3 是2種選擇的第一種{3, 6},所以變?yōu)?。
  • 末位6 是1種選擇的第一種{6},所以變?yōu)?。

  我們發(fā)現(xiàn):第i位的值就是ai - 左邊比它小的數(shù)的個數(shù)- 1。

for (int i = 1; i <= n; ++i) {cin >> a[i];int x = a[i];for (int j = 1; j <= a[i]; ++j)x -= vis[j];vis[a[i]] = 1;a[i] = x - 1; }?

  之后把變進制數(shù)轉化成10進制就可以了

ll res = 0; for (int i = 1; i < n; ++i)res = (res + a[i]) * (n - i);

  最后的答案是 res + 1。

?

優(yōu)化

?


?

  剛才的算法復雜度有O(N ^ 2),其實對于找左側比ai小的數(shù)的時候,用樹狀數(shù)組維護一下就可以在log的時間內(nèi)求出該值。

?

#include <bits/stdc++.h> using namespace std; #define forn(i, n) for (int i = 0; i < (n); i++) #define forab(i, a, b) for (int i = (a); i <= (b); i++) #define forba(i, b, a) for (int i = (b); i >= (a); i--) #define mset(a, n) memset(a, n, sizeof(a)) #define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) #define N 1000005 #define ll long long const int Q = 998244353; int a[N], c[N], n; ll res; inline int lowbit(int x) { return x & (-x); } void add(int x,int d) {while(x <= n){c[x] += d;
    x += lowbit(x);} } int sum(int x) {int s = 0;while(x){s += c[x];x -= lowbit(x);}return s; } int main() {fast;cin >> n;forab(i, 1, n){cin >> a[i];add(a[i], 1);if(i < n)res = ((res + a[i] - sum(a[i] - 1) - 1) * (n - i)) % Q;}cout << (res + 1) << endl; }

?(正在嘗試手推逆向康拓展開。。。

  

?

轉載于:https://www.cnblogs.com/zssst/p/11349750.html

總結

以上是生活随笔為你收集整理的康拓展开学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。