EZOJ #373排序

Posted yzxverygood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EZOJ #373排序相关的知识,希望对你有一定的参考价值。

分析

它居然真的是个nlog^3暴力?!

两个数在加小于min(lowbit(x),lowbit(y))的数时对他们的奇偶性不影响

因此每次加上min(lowbit(x),lowbit(y))判断此时的奇偶性

直接排序即可

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long 
int a[100100],n;
inline int lb(int x)return x&(-x);
inline int cnt(int x)int res=0;while(x)res+=(x&1),x>>=1;return res;
inline bool cmp(int x,int y)while((cnt(x)&1)==(cnt(y)&1))int t=min(lb(x),lb(y));x+=t,y+=t;return !(cnt(x)&1);
signed main()
    int i,j,k;
    scanf("%lld",&n);
    for(i=1;i<=n;i++)scanf("%lld",&a[i]);
    sort(a+1,a+n+1,cmp);
    for(i=1;i<=n;i++)printf("%lld ",a[i]);
    return 0;

以上是关于EZOJ #373排序的主要内容,如果未能解决你的问题,请参考以下文章

多线程合并排序算法

EZOJ #78

EZOJ #81

EZOJ #374学习

EZOJ #386 最小生成树

EZOJ #361地理