关于排序
查看原帖
关于排序
1238483
cqbzzlr楼主2024/10/22 20:40

为什么nlogn的排序会TLE#13~#20?

#include <bits/stdc++.h>

using namespace std;

struct node{
	int x,y,z,ans,id;
}a[500005];

int g[500005],s[500005],b[500005];

bool cmp1(node x,node y)
{
	return x.x > y.x;
}
bool cmp2(node x,node y)
{
	return x.y > y.y;
}
bool cmp3(node x,node y)
{
	return x.z > y.z;
}
int ans[200005];
int main()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		a[i].id = i;
		a[i].ans = 0x3f3f3f3f;
		scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z); 
	}
	sort(a + 1,a + n + 1,cmp1);
	g[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(a[i].x == a[i - 1].x) g[i] = g[i - 1];
		else g[i] = i;
	}
	for(int i = 1;i <= n;i++)
	{
		a[i].ans = min(a[i].ans,g[i]);
	} 
	sort(a + 1,a + n + 1,cmp2);
	s[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(a[i].y == a[i - 1].y) s[i] = s[i - 1];
		else s[i] = i;
	}
	for(int i = 1;i <= n;i++)
	{
		a[i].ans = min(a[i].ans,s[i]);
	} 
	sort(a + 1,a + n + 1,cmp3);
	b[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(a[i].z == a[i - 1].z) b[i] = b[i - 1];
		else b[i] = i;
	}
	for(int i = 1;i <= n;i++)
	{
		a[i].ans = min(a[i].ans,b[i]);
		ans[a[i].id] = a[i].ans;
	}
	for(int i = 1;i <= n;i++) printf("%d\n",ans[i]);
}```
2024/10/22 20:40
加载中...