func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 10;   const int M = N * 30;   int tree[M][2];   vector<int> val[M];   int main() {     int n;     scanf( %d , &n);     vector<int> a(n + 1);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     int idx = 0;     auto insert = [&](int n, int id) {       int tmp = 0;       bitset<30> st(n);       for (int i = 29; i >= 0; i--) {         if (!tree[tmp][st[i]]) tree[tmp][st[i]] = ++idx;         tmp = tree[tmp][st[i]];         val[tmp].emplace_back(id);       }     };     for (int i = 1; i <= n; i++) insert(a[i], i);     auto get_cal = [&](vector<int> &a, vector<int> &b) -> long long {       long long ans = 0;       int i = 0, j = 0;       while (i < a.size() && j < b.size()) {         if (a[i] < b[j])           i++;         else           ans += (int)a.size() - i, j++;       }       return ans;     };     vector<vector<long long>> ans(30, vector<long long>(2, 0));     function<void(int, int)> query = [&](int root, int deep) {       if (!tree[root][0] && !tree[root][1]) return;       long long cnt = get_cal(val[tree[root][0]], val[tree[root][1]]);       ans[deep][0] += cnt;       ans[deep][1] +=           1LL * val[tree[root][0]].size() * val[tree[root][1]].size() - cnt;       if (tree[root][0]) query(tree[root][0], deep - 1);       if (tree[root][1]) query(tree[root][1], deep - 1);     };     query(0, 29);     int res = 0;     long long cnt = 0;     for (int i = 29; i >= 0; i--) {       if (ans[i][0] > ans[i][1])         res += 1 << i, cnt += ans[i][1];       else         cnt += ans[i][0];     }     printf( %lld %d n , cnt, res);     return 0;   }   