View Code of Problem 5

// ZGUOJ5.cpp : 定义控制台应用程序的入口点。
//

#include<stdio.h>
typedef struct ms
{
	int apple;
	int li;
	int numer;
}ms;
void qsort1(ms a[],int n);
void qsort2(ms a[],int first,int last);
void qsort1(ms a[],int n)
{
	int first=0,last=n-1;
	qsort2(a,first,last);
}
void qsort2(ms a[],int first,int last)
{
	int tmp=first,i=first,j=last,flag=0;
	ms temp=a[first];
	while(i<j)
	{
		if(flag==0)
		{
			if(a[j].apple>temp.apple)
			{
				a[tmp]=a[j];
				tmp=j;
				flag=1;
			}
			else if(a[j].apple==temp.apple)
			{
				if(a[j].li>temp.li)
				{
					a[tmp]=a[j];
					tmp=j;
					flag=1;
				}
				else if(a[j].li==temp.li)
				{
					if(a[j].numer<temp.numer)
					{
						a[tmp]=a[j];
						tmp=j;
						flag=1;
					}
					else
						j--;
				}
				else
					j--;
			}
			else
				j--;
		}
		else
		{
			if(a[i].apple<temp.apple)
			{
				a[tmp]=a[i];
				tmp=i;
				flag=0;
			}
			else if(a[i].apple==temp.apple)
			{
				if(a[i].li<temp.li)
				{
					a[tmp]=a[i];
					tmp=i;
					flag=0;
				}
				else if(a[i].li==temp.li)
				{
					if(a[i].numer>temp.numer)
					{
						a[tmp]=a[i];
						tmp=i;
						flag=0;
					}
					else
						i++;
				}
				else
					i++;
			}
			else
				i++;
		}
	}
	a[tmp]=temp;
	if(first<tmp-1)
	qsort2(a,first,tmp-1);
	if(tmp+1<last)
	qsort2(a,tmp+1,last);
}
ms yida[100001];
int main()
{
	int t,n,m,i,j,sum1,sum2;
	scanf("%d",&t);
	for(i=0;i<t;i++)
	{
		sum1=0,sum2=0;
		scanf("%d%d",&n,&m);
		for(j=0;j<n;j++)
		{
			scanf("%d%d",&yida[j].apple,&yida[j].li);
			yida[j].numer=j+1;
		}
		qsort1(yida,n);
		for(j=0;j<m;j++)
		{
			printf("%d",yida[j].numer);
			if(j!=m-1)
				printf(" ");
			else
				printf("\n");
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 5