zoukankan      html  css  js  c++  java
  • CF 1416C XOR Trie

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 #define rg register
     4 using namespace std;
     5 const int N = 6e6 + 10;
     6 int a[N];
     7 int t[N][2], cnt = 0;
     8 vector<int> v[N];
     9 ll dp[30][2];
    10 
    11 void Insert(int x, int pos)
    12 {
    13     int root = 0;
    14     for(rg int i = 29 ; i >= 0 ; i--){
    15         int now = ((x >> i) & 1);
    16         if(!t[root][now]){
    17             t[root][now] = ++cnt;
    18         }
    19         root = t[root][now];
    20         v[root].push_back(pos);
    21     }
    22 }
    23 
    24 void solve(int root, int now)
    25 {
    26     int lson = t[root][0], rson = t[root][1];
    27     if(lson)    solve(lson, now - 1);
    28     if(rson)    solve(rson, now - 1);
    29     if(!lson || !rson)    return ;
    30     
    31     ll t = 0;
    32     ll sum = 0;
    33     for(auto x : v[lson]){
    34         while(t < (ll)v[rson].size() && x > v[rson][t])    t++;
    35         sum += t;
    36     }
    37     dp[now][0] += sum;
    38     dp[now][1] += (ll)v[lson].size() * 1ll * (ll)v[rson].size() - sum;
    39 }
    40 
    41 int main(){
    42     int n;scanf("%d",&n);
    43     for(rg int i = 1 ; i <= n ; i++){
    44         scanf("%d",&a[i]);
    45         Insert(a[i], i);
    46     }
    47     solve(0, 29);
    48     
    49     ll inv = 0, X = 0;
    50     for(int i = 0 ; i <= 29 ; i++){
    51         if(dp[i][0] > dp[i][1]){
    52             X += (1 << i);
    53             inv += dp[i][1];
    54         }else{
    55             inv += dp[i][0];
    56         }
    57     }
    58     printf("%lld %lld
    ", inv, X);
    59     return 0;
    60 }
  • 相关阅读:
    【字符串/广搜】P1032 字串变换
    【动态规划】P1541 乌龟棋
    【动态规划/递归】(团队内部比赛试题)T134293 T2.货币系统问题
    Redis-事务
    Redis-Pipeline
    Redis-通过前缀获取所有key
    Spring 三级缓存
    TopK_LRU_归并

    如何从一亿个数组里找出最大的十个
  • 原文地址:https://www.cnblogs.com/ecustlegendn324/p/14073061.html
Copyright © 2011-2022 走看看