Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define mp make_pair
- #define pb push_back
- #define fi first
- #define se second
- using namespace std;
- typedef long long ll;
- typedef pair<int ,int> ii;
- typedef vector<int> vi;
- vi nums;
- int cnt[1 << 11][1 << 11];
- bool cmp(const int &a, const int &b) {
- int pa = __builtin_popcount(a);
- int pb = __builtin_popcount(b);
- if(pa == pb) {
- return a < b;
- }else {
- return pa < pb;
- }
- }
- int main() {
- ll n, m;
- cin >> n >> m;
- for(int i = 0; i < n; i++) {
- int cur;
- cin >> cur;
- nums.pb(cur);
- }
- sort(nums.begin(), nums.end(), cmp);
- int h1 = m/2;
- int h2 = m - h1;
- ll ans = 0;
- for(int i = 0; i < n; i++) {
- int h1bit = 0;
- int h2bit = 0;
- int curn = nums[i];
- ll curans = 0;
- for(int j = 0; j < h1; j++) {
- h1bit *= 2;
- h1bit += curn&1;
- curn = curn >> 1;
- }
- for(int j = 0; j < h2; j++) {
- h2bit *= 2;
- h2bit += curn&1;
- curn = curn >> 1;
- }
- for(int j = h2bit; j; j = ((j - 1)&h2bit)) {
- curans += cnt[h1bit][j];
- }
- curans += cnt[h1bit][0];
- ans += curans;
- int h1bitneg = (~h1bit)&((1 << h1)-1);
- for(int j = h1bitneg; j; j = ((j - 1)&h1bitneg)) {
- cnt[j | h1bit][h2bit]++;
- }
- cnt[h1bit][h2bit]++;
- }
- cout << (n*(n-1))/2 - ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement