二分95求调
查看原帖
二分95求调
302158
N1ght_Star楼主2024/10/29 14:54
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+7;
int a[maxn],hit[maxn];
int n;
int fd(int x){
	int l=1,r=n;
	int mid=(l+r)>>1;
	while(l<r){
		if(a[mid]>x && hit[mid]==0){
			r=mid,mid=(l+r)>>1;
		}
		else{
			l=mid+1,mid=(l+r)>>1;
		}
	}
	return mid;
}
int cnt1,cnt2;
bool cmp(int x,int y){return x<y;}
signed main(){
	// freopen("duel3.in","r",stdin);
	// freopen("duel3.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]==1)	cnt1++;
		if(a[i]==2)	cnt2++;
	}
	if((cnt1+cnt2)==n){
		if(cnt1>cnt2){
			cout<<cnt1;
			// cout<<"a1";
			return 0;
		}
		if(cnt1<=cnt2){
			cout<<cnt2;
			// cout<<"a2";
			return 0;
		}
	}
	sort(a+1,a+n+1,cmp);
	int q;
	int cnt=0;
	for(int i=1;i<=n;i++){
		q=fd(a[i]);
		// cout<<i<<' '<<q<<"\n";
		if(q!=i && !hit[q]){
			hit[q]=1;
			cnt++;
		}
	}
	cout<<n-cnt;
	return 0;
}
2024/10/29 14:54
加载中...