a==b
a>b时按: if(a.shu==b.shu) return a.no<b.no; return a.shu<b.shu;
a<b时按: if(a.shu==b.shu) return a.no>b.no; return a.shu<b.shu;
View Code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct data
{
int no;
int shu;
}qun[100009];
bool hash[100009];
int cmp(data a,data b)
{
if(a.shu==b.shu)
return a.no<b.no;
return a.shu<b.shu;
}
int cmp1(data a,data b)
{
if(a.shu==b.shu)
return a.no>b.no;
return a.shu<b.shu;
}
int main()
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
int i;
for(i=0;i<n;i++)
{
scanf("%d",&qun[i].shu);
qun[i].no=i;
}
if(a==b)
{
for(i=0;i<a;i++)
printf("1 ");
for(i=0;i<b;i++)
printf("2 ");
printf("\n");
return 0;
}
if(a>b)
{
sort(&qun[0],&qun[n],cmp);
for(i=0;i<a;i++)
{
hash[qun[i].no]=1;
}
for(i=0;i<n;i++)
{
if(hash[i]==1)
printf("1 ");
else
printf("2 ");
}
}
else
{
sort(&qun[0],&qun[n],cmp1);
for(i=0;i<b;i++)
{
hash[qun[i].no]=1;
}
for(i=0;i<n;i++)
{
if(hash[i]==1)
printf("2 ");
else
printf("1 ");
}
}
printf("\n");
}