比赛 20241125 评测结果 AAAAAEEEEE
题目名称 又是决斗 最终得分 50
用户昵称 flyfree 运行时间 1.158 s
代码语言 C++ 内存使用 4.35 MiB
提交时间 2024-11-25 08:15:23
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 100010 
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
ll t[MAXN],a[MAXN],n,sum[MAXN];
bool cmp(ll a,ll b){
	return a>b;
}
struct node{
	ll h[MAXN],siz;
	void insert(ll x){
		h[++siz]=x;
	}
	void mk(){
		ll _siz=siz;
		sort(h+1,h+1+siz);
		for(int i=1;i<=_siz;i++){
			if(h[i]==h[i+1]){
				h[i]=0;
				siz--;
			}
		}
		sort(h+1,h+1+_siz,cmp);
		sort(h+1,h+1+siz);
	}
	ll find(ll x){
		ll l=1,r=siz;
		while(l<r){
			ll mid=(l+r+1)/2;
			if(h[mid]<=x)l=mid;
			else r=mid-1;
		}
		return l;
	}
}pre;
int main(){
	freopen("duela.in","r",stdin);
	freopen("duela.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		pre.insert(a[i]);
//		t[a]++;
	}
	pre.mk();
	for(int i=1;i<=n;i++){
		t[pre.find(a[i])]++;
	}
	for(int i=1;i<=pre.siz;i++){
		ll s=min(t[i],t[i-1]),q=0;
		t[i]-=s,t[i-1]-=s;
		if(t[i]){
			q=min(sum[i-1],t[i]/2);
		}
		t[i]=t[i]+t[i-1]-2*q;
		sum[i]=sum[i-1]+s+q;
	}
	cout<<t[pre.siz];
	return 0;
}