提交记录 4889


用户 题目 状态 得分 用时 内存 语言 代码长度
ruanxingzhi 1001a. 测测你的排序2 Accepted 100 1.109 ms 88 KB C++ 1.20 KB
提交时间 评测时间
2018-08-03 11:51:24 2020-07-31 23:25:30

void swap(unsigned &x,unsigned &y)
{
    int t=x;
    x=y,y=t;
}

struct Heap                 //小根堆
{
    unsigned int a[10005];
    int tot;

    #define LE(x) ((x)<<1)
    #define RT(x) (((x)<<1)+1)
    #define DAD(x) ((x)>>1)

    Heap() {tot=0;}

    void modify(int x)
    {
        int mi;

        if(LE(x)>tot || x>tot) return;
        if(RT(x)>tot) mi=LE(x);
        
        else if(a[LE(x)]<a[RT(x)]) mi=LE(x);
        else mi=RT(x);

        if(a[x]>a[mi]) swap(a[x],a[mi]);
    }

    void ins(int x)
    {
        tot++;
        a[tot]=x;
        for(x=DAD(tot);x;x=DAD(x))
            modify(x);
    }

    int top()
    {
        return a[1];
    }

    void repair()
    {
        int mi,x;

        for(x=1;x<=tot;x=mi)
        {
            if(LE(x)>tot) break;
            if(RT(x)>tot) mi=LE(x);
            
            else if(a[LE(x)]<a[RT(x)]) mi=LE(x);
            else mi=RT(x);

            if(a[x]>a[mi]) swap(a[x],a[mi]);
            else break;
        }
    }

    void pop()
    {
        swap(a[1],a[tot]);
        tot--;

        repair();
    }

};

Heap s;

void sort(unsigned *a, int n) {
	int i;

    for(i=0;i<n;i++)
        s.ins(a[i]);
    for(i=0;i<n;i++)
        a[i]=s.top(),s.pop();
}
	

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.109 ms88 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-12 19:09:06 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠