比赛时打了二分,然后就 TLE 了,请大佬们帮康康。
#include<bits/stdc++.h>
using namespace std;
long long g[200005],s[200005],b[200005];
long long gg[200005],ss[200005],bb[200005];
bool cmp(long long a,long long b){
return a>b;
}
long long n;
long long erfen1(long long x){
long long l = 1,r = n;
while(l<=r){
long long mid = (l+r)/2;
if(gg[mid]==x){
while(gg[mid]==x) mid--;
return mid+1;
}
else if(gg[mid]>x) l = mid+1;
else if(gg[mid]<x) r = mid-1;
}
}
long long erfen2(long long x){
long long l = 1,r = n;
while(l<=r){
long long mid = (l+r)/2;
if(ss[mid]==x){
while(ss[mid]==x) mid--;
return mid+1;
}
else if(ss[mid]>x) l = mid+1;
else if(ss[mid]<x) r = mid-1;
}
}
long long erfen3(long long x){
long long l = 1,r = n;
while(l<=r){
long long mid = (l+r)/2;
if(bb[mid]==x){
while(bb[mid]==x) mid--;
return mid+1;
}
else if(bb[mid]>x) l = mid+1;
else if(bb[mid]<x) r = mid-1;
}
}
int main(){
scanf("%d",&n);
for(long long i = 1;i<=n;i++){
scanf("%d%d%d",&g[i],&s[i],&b[i]);
gg[i] = g[i],ss[i] = s[i],bb[i] = b[i];
}
sort(gg+1,gg+1+n,cmp);
sort(ss+1,ss+1+n,cmp);
sort(bb+1,bb+1+n,cmp);
for(long long i = 1;i<=n;i++){
cout<<min(erfen1(g[i]),min(erfen2(s[i]),erfen3(b[i])))<<"\n";
}
return 0;
} /*
4
8 5 0
4 5 3
4 1 2
2 1 1*/