Submission #478638

#TimeUsernameProblemLanguageResultExecution timeMemory
478638CSQ31Diversity (CEOI21_diversity)C++17
64 / 100
114 ms7968 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5+1;
int cnt[MAXN+1];
typedef long long int ll;
int main()
{
	int n,q;
	cin>>n>>q;
	vector<int>a(n);
	for(int i=0;i<n;i++)cin>>a[i];
	if(q==1){
		int l,r;
		cin>>l>>r;
		vector<int>c;
		for(int x:a)cnt[x]++;
		for(int i=1;i<=MAXN;i++){
			if(cnt[i])c.push_back(cnt[i]);
		}
		sort(c.begin(),c.end());
		deque<int>lef,rig;
		ll lsum = 0,rsum =0;
		for(int x:c){
			if(lsum <= rsum){
				lsum+=x;
				lef.push_back(x);
			}else{
				rsum+=x;
				rig.push_front(x);
			}
		}
		vector<int>fin;
		while(!lef.empty()){
			fin.push_back(lef.front());
			lef.pop_front();
		}
		while(!rig.empty()){
			fin.push_back(rig.front());
			rig.pop_front();
		}
		int i = 0;
		ll ans = 0;
		for(int x:fin){
			//cout<<x<<" ";
			ans+=(i+x) * 1LL * (n-i) - (x*1LL*(x-1))/2;
			i+=x;
		}
		cout<<ans<<'\n';
		
	}
	
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...