Untitled

 avatar
unknown
plain_text
a year ago
2.3 kB
5
Indexable
#pragma GCC optimize("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC optimize ("Ofast,no-stack-protector", "omit-frame-pointer", "inline", "-ffast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,fma,popcnt,abm,mmx,avx")

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

#define fi first
#define se second
#define pp push_back
#define all(x) (x).begin(), (x).end()
#define Ones(n) __builtin_popcount(n)
#define endl '\n'
#define mem(arrr, xx) memset(arrr,xx,sizeof arrr)
#define PI acos(-1)
//#define int long long
#define debug(x) cout << (#x) << " = " << x << endl

void Gamal() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
#ifdef Clion
    freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}

int dx[] = {+0, +0, -1, +1, +1, +1, -1, -1};
int dy[] = {-1, +1, +0, +0, +1, -1, +1, -1};

const double EPS = 1e-9;
const ll OO = 0X3F3F3F3F3F3F3F3F;
const int N = 1e5 + 5, INF = INT_MAX, MOD = 1e9 + 7, LOG = 17;

int cnt[1 << LOG],a[N],vid;
pii dp[LOG][1 << LOG][2];
int vis[LOG][1 << LOG][2];

pii slv(int bit,int msk,int odd){
    if(!~bit){
        if(odd)return {cnt[msk],cnt[msk]};
        else return {0,cnt[msk]};
    }
    pii &ret = dp[bit][msk][odd];
    if(vis[bit][msk][odd] == vid)
        return ret;
    vis[bit][msk][odd] = vid;
    ret = slv(bit-1,msk,odd);
    if(msk >> bit & 1){
        pii y = slv(bit-1,msk ^ (1 << bit),odd ^ 1);
        ret.fi += y.fi + (!odd) * y.se;
        ret.se += y.se;
    }
    else{
        pii y = slv(bit-1,msk ^ (1 << bit),odd);
        ret.fi += y.fi + y.se;
        ret.se += y.se;
    }
    return ret;
}

void solve() {
    int n;cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        cnt[a[i]]++;
    }
    vid++;
    int ans = 1e9;
    for (int msk = 0; msk < 1 << LOG; ++msk) {
        ans = min(ans,slv(LOG - 1,msk,false).first);
    }
    cout << ans << endl;

    for (int i = 0; i < n; ++i) {
        cnt[a[i]]--;
    }
}


signed main() {
    Gamal();
    int t = 1;
    cin >> t;
    while (t--) {
        solve();
    }
}
Editor is loading...
Leave a Comment