二分 T 了
查看原帖
二分 T 了
1245384
Mzh2012楼主2024/10/13 20:03

比赛时打了二分,然后就 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*/
2024/10/13 20:03
加载中...