为什么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]);
}```