10RE?
查看原帖
10RE?
742462
truekun楼主2024/7/23 17:02
#include<bits/stdc++.h>
using namespace std;
#define int long long 
signed main(){
	int n;
	int a[10000001]={};
	int ans;
	map<int,pair<int,int> > m;//数量————是否有多少左括号  1,:是  0:不是 i位置上 
	priority_queue<int,vector<int>,greater<int> > q;//右括号位置
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		m[a[i]].first++;
	} 
//	for(int i=1;i<=n;i++){
//		cout<<m[a[i]].first<<" "<<endl;
//	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++){
		if (a[i]==a[i-1]) continue;
		if(m[a[i]].first>m[a[i]-1].first){
			m[a[i]].second=m[a[i]].first-m[a[i]-1].first;
		}else if(m[a[i]].first>m[a[i]+1].first){
			for(int j=m[a[i]+1].first;j<m[a[i]].first;j++){
				q.push(a[i]);
			}
		}
	}
	int mmin=1145114511;
	for(int i=1;i<=n;i++){
		if(a[i]==a[i-1]) continue;
		for(int j=1;j<=m[a[i]].second;j++){
			//printf("%d %d\n",a[i],q.top());
			ans=q.top()-a[i]+1;
			mmin=min(ans,mmin);
		//	cout<<a[i]<<" "<<q.top()<<endl;
			q.pop();
		}
		//m[a[i]].second=0;
	}
	cout<<mmin;
	return 0;
}
2024/7/23 17:02
加载中...