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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)

發布時間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1417E XOR Inverse(字典树求逆序对+分治) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個長度為 n 的數列 a,現在要求選出一個 x,將 a 中的每個元素都異或之后得到一個新的數列 b,要求數列 b 的逆序對最小,問最小的逆序對是多少,x 該如何選擇

題目分析:才知道字典樹上分治也可以求逆序對,時間復雜度是 nlogn 的,做法如下:

  • 將每個數都插入到字典樹中,記錄一下其下標
  • 對于某個節點來說,其左子樹中的點一定小于其右子樹中的點
  • 所以遍歷一遍左子樹中的點,雙指針找一下右子樹中有多少個點的下標大于當前枚舉的點,累加起來就是逆序對的個數了
  • 因為每一層最多有 n 個數,一共有 logn 層,所以遍歷的次數約等于 nlogn 次

    現在考慮該如何計算 x,假設 x 中的某一位為 0,那么在字典樹上將不產生影響,如果其中的某一位為 1 ,將對其對應層數的所有節點的左右子樹互換,注意這個過程中,只會影響到當前層數的逆序對,而不會影響到其他的層數的答案,換句話說,在這個題目中,x 中的每一位相互獨立

    再考慮如果 x 的某一位是 1 的話會造成什么影響,設原本的逆序對為 ans1,順序對為 ans2,如果將該層的左右子樹互換的話,那么 ans1 和 ans2 的值也會相應的被交換,所以我們可以對于每一層統計一下 dp[ deep ][ 0 ] 和 dp[ deep ][ 1 ] 分別表示當前層數中逆序對和順序對的個數,如果某一層的逆序對更少,顯然當前位填 0 更優,否則填 1 更優

    代碼:
    ?

    #pragma GCC optimize(2) #pragma GCC optimize("Ofast","inline","-ffast-math") #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> #include<unordered_map> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=3e5+100;vector<int>node[N*40];int trie[N*40][2],cnt;LL dp[40][2];int newnode() {cnt++;trie[cnt][0]=trie[cnt][1]=0;node[cnt].clear();return cnt; }void insert(int x,int id) {int pos=0;for(int i=30;i>=0;i--){int to=(x>>i)&1;if(!trie[pos][to])trie[pos][to]=newnode();pos=trie[pos][to];node[pos].push_back(id);} }void dfs(int pos,int deep) {if(deep==-1)return;int lson=trie[pos][0],rson=trie[pos][1];LL res=0,r=0;int lsz=node[lson].size(),rsz=node[rson].size();for(int i=0;i<lsz;i++){while(r<rsz&&node[lson][i]>node[rson][r])r++;res+=r;}dp[deep][0]+=res;dp[deep][1]+=1LL*lsz*rsz-res;if(lson)dfs(lson,deep-1);if(rson)dfs(rson,deep-1); }void init() {cnt=-1;newnode(); }int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);init();int n;scanf("%d",&n);for(int i=1;i<=n;i++){int num;scanf("%d",&num);insert(num,i);}dfs(0,30);LL ans=0,x=0;for(int i=0;i<=30;i++){if(dp[i][0]<=dp[i][1])ans+=dp[i][0];else{ans+=dp[i][1];x|=(1<<i);}}printf("%lld %lld\n",ans,x);return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 好吊妞视频在线 | 日本少妇电影 | 日韩视频在线免费播放 | 一区二区在线观看视频 | 韩国伦理在线视频 | 国产欧美日韩视频 | 亚洲成人高清在线 | 欧美男优 | 在线免费av网 | 丰满熟女人妻一区二区三 | 91在线公开视频 | 国产av无码专区亚洲a∨毛片 | 国产成人无码精品久久 | 波多野在线播放 | 26uuu精品一区二区在线观看 | 中国成熟妇女毛茸茸 | 日本wwwxxxx | 免费观看国产精品 | 天天干天天色综合 | 四虎av网站| 国产天堂av | www.白虎| 欧美资源在线观看 | 91久久久久久久久久久久久 | 少妇被躁爽到高潮无码文 | 欧美视频在线观看 | 亚洲精品午夜精品 | 国产精品视频全国免费观看 | 中国无码人妻丰满熟妇啪啪软件 | 精品国产专区 | 99视频网址 | 日大逼| 色噜噜综合网 | 粉嫩av一区二区 | 久久久电影 | 操碰视频在线 | 国产精品xxxx| 特黄特色大片免费 | 男操女视频网站 | 亚洲一区二区小说 | 一区日韩| 精品亚洲aⅴ无码一区二区三区 | av最新资源| 天堂av中文 | 大黑人交xxx极品hd | 五月婷婷激情小说 | 性猛交娇小69hd | 超碰人人在线观看 | 久久人人澡 | 天堂在线视频tv | 在线观看网页视频 | 91成人在线观看喷潮 | 中字幕视频在线永久在线观看免费 | av天天看 | 国产婷婷一区二区三区 | 国产精品一区二区三区四区在线观看 | 中文字幕女优 | 日韩精品免费 | 欧美日韩精选 | 一本大道久久 | 国v精品久久久网 | 国产美女视频网站 | 欧美黄网在线观看 | 18禁免费观看网站 | 日韩欧美h | 国产午夜一区二区 | 青青草在线播放 | 午夜精品久久久久久久久久久久久 | 天天做夜夜爱 | 十八岁世界在线观看高清免费韩剧 | av调教 | 久久作爱视频 | 秋霞在线一区 | 午夜精品av| 亚洲永久精品一区二区 | 在线欧美激情 | 亚洲黄片一区 | 精品人妻一区二区三区四区五区 | 中国美女洗澡免费看网站 | 伊人成人动漫 | www日本com | 三级福利视频 | 美女张开腿露出尿口 | 一区二区精品视频在线观看 | 午夜视频一区二区三区 | 亚洲美女综合 | 亚洲成人 av | 日本综合色 | 华丽的外出在线 | 在线观看免费国产 | 色四月 | 免费看黄色的网址 | 熟妇人妻av无码一区二区三区 | 日韩精品在线观看视频 | 一二三在线视频 | 亚洲永久| 97综合网| 香蕉大久久 | 在线免费福利 |