45分,求调
  • 板块P11185 奖牌排序
  • 楼主ninguo
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/13 16:30
  • 上次更新2024/10/13 18:47:50
查看原帖
45分,求调
1070073
ninguo楼主2024/10/13 16:30
#include<bits/stdc++.h>
using namespace std;
struct me
{
	int f,s,t,num,number;
}a[200000];
int n,k,b[200000];
bool cmp(const me a,const me b)
{
	return a.f>b.f;
}
bool cmp1(const me a,const me b)
{
	return a.s>b.s;
}
bool cmp2(const me a,const me b)
{
	return a.t>b.t;
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].f>>a[i].s>>a[i].t;
		a[i].number=i;
	}
	sort(a,a+n,cmp);
	a[0].num=1;
	for(int i=1;i<n;i++)
	{
		if(a[i].f==a[i-1].f)
		{
			a[i].num=a[i-1].num;
		}
		else a[i].num=i+1;
	}
	sort(a,a+n,cmp1);
	a[0].num=1;
	for(int i=1;i<n;i++)
	{
		if(a[i].s==a[i-1].s)
		{
			k=i;
			while(i<n&&a[i].s==a[i-1].s)
			{
				a[i].num=min(k,a[i].num);
				i++;
			}
		}
		else a[i].num=min(i+1,a[i].num);
	}
	sort(a,a+n,cmp2);
	a[0].num=1;
	for(int i=1;i<n;i++)
	{
		if(a[i].t==a[i-1].t)
		{
			k=i;
			while(i<n&&a[i].t==a[i-1].t)
			{
				a[i].num=min(k,a[i].num);
				i++;
			}
		}
		else a[i].num=min(i+1,a[i].num);
	}
	for(int i=0;i<n;i++)
	{
		b[a[i].number]=a[i].num;
	}
	for(int i=0;i<n;i++)
	{
		cout<<b[i]<<endl;
	}
}
2024/10/13 16:30
加载中...