HDU 4163 Stock Prices

http://acm.hdu.edu.cn/showproblem.php?pid=4163

稳定排序

View Code
#include <iostream>

#include <cstdlib>

#include <cstring>

#include <string>

#include <stack>

#include <queue>

#include <map>

using namespace std;

typedef struct L{

    int price;

    int idx;

}L;

L kk[1000001];

int cmp1(const void*a,const void*b)

{

    L*c=(L*)a;

    L*d=(L*)b;

    if(c->price==d->price)

        return c->idx-d->idx;

    return c->price-d->price;

}

int cmp2(const void*a,const void*b)

{

    L*c=(L*)a;

    L*d=(L*)b;

    return c->idx-d->idx;

}

int cmp3(const void*a,const void*b)

{

    L*c=(L*)a;

    L*d=(L*)b;

    if(c->price==d->price)

        return d->idx-c->idx;

    return d->price-c->price;

}

int cmp4(const void*a,const void*b)

{

    L*c=(L*)a;

    L*d=(L*)b;

    return d->idx-c->idx;

}

int main()

{

    int n,k1,k2;

    int nCase=1;

    while(~scanf("%d%d%d",&n,&k1,&k2),n,k1,k2)

    {

        for(int i=0;i<n;i++)

        {

            scanf("%d",&kk[i].price);

            kk[i].idx=i+1;

        }

        printf("Case %d\n",nCase++);

        qsort(kk,n,sizeof(L),cmp1);

        qsort(kk,k1,sizeof(L),cmp2);

        printf("%d",kk[0].idx);

        for(int i=1;i<k1;i++)

            printf(" %d",kk[i].idx);

        putchar('\n');

        qsort(kk,n,sizeof(L),cmp3);

        qsort(kk,k2,sizeof(L),cmp4);

        printf("%d",kk[0].idx);

        for(int i=1;i<k2;i++)

            printf(" %d",kk[i].idx);

        putchar('\n');

    }

    return 0;

}

 

你可能感兴趣的:(HDU)