Submission #617321

#TimeUsernameProblemLanguageResultExecution timeMemory
617321Mr_HusanboyDiversity (CEOI21_diversity)C++14
64 / 100
334 ms28776 KiB
#pragma GCC optimize("Ofast")

#include<bits/stdc++.h>


 
 
using namespace std;
using ll = long long;


 
mt19937 rng(123);
#define ld long double
#define ull unsigned long long 
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(a) a.begin(), a.end()
#define ff first
#define ss second
#define vi vector<int>
#define vll vector<ll>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define setp(x) setprecision(x)


ll mod=1e9+7;
int inf=1e9;
const int LOGN = 20;
const int MXX=3e5;

const long double PI = 3.1415926535897932384626433832795;



ll manhat(vector<ll> v){
	ll sum = 0;
	ll dis = 0;
	ll n = v.size();
	for(ll i = 0; i < v.size(); i ++){
		dis +=(v[i] * i - sum);
		sum += v[i];
	}
	return dis + (n-1)*n / 2;
}


ll calc(deque<ll> v){
	ll ans = 0;
	for(auto u : v) ans += (u+1)*u/2;
//	cout << ans << " ans" << endl;
	map<ll,vector<ll>> mp;
	int n = v.size();
	for(int i = 0; i < n; i ++){
		mp[v[i]].push_back(i);
	}
	vector<pair<ll,vll>>  a;
	vector<ll> dis;
	for(auto u : mp) a.push_back({u.ff,u.ss}), dis.push_back(manhat(u.ss));
/*	for(auto u : a){
		cout << u.ff << ": "; for(auto it : u.ss) cout << it << ' '; cout << endl;
	}*/
	
	n = a.size();
	for(int i = 0; i < n; i ++){
		ans += dis[i] * a[i].ff * a[i].ff;
//		cout << dis[i] << endl;;
		for(int j = i + 1; j < n; j ++){
			vector<ll> tem;
			merge(all(a[i].ss), all(a[j].ss), back_inserter(tem));
	//		cout << a[i].ff << "-" << a[j].ff << ' ' << manhat(tem) - dis[i] - dis[j] << endl;
			ans += a[i].ff * a[j].ff * (manhat(tem) - dis[i] - dis[j]);
	//		cout << ans << endl;
		}
	}
	return ans;
}

/*
9 1
1 1 1 2 2 2 3 3 4
*/

ll calcc(deque<ll> v){
	ll ans = 0;
//	cout << "calcc \n";
	for(auto u : v) ans += (u+1)*u/2;
	int n = v.size();
	for(ll i = 0; i < n; i ++){
		for(ll j = i + 1; j < n; j ++){
			ans += (j-i + 1) * (v[j] * v[i]);
		//	cout << v[j] << "-" << v[i] << ' ' << (j-i+1) << endl;
		}
	}
	return ans;
	
}


void solve(){
	int n, q; cin >> n >> q;
	map<int,int> mp;
	for(int i = 0; i<n; i ++){
		int x; cin >> x; x --;
		mp[x] ++;
	}
	vector<pair<int,int>> v;
	for(auto u : mp){
		v.push_back({u.ss,u.ff});
	}
	sort(all(v), greater<>());
//	for(auto u : v) cout << u.ff << ' ' << u.ss << endl;cout << endl;
	deque<int> a;
	int col = 1;
	deque<ll> arr;
	for(auto u : v){
		int tem = u.ff;
		if(col){
		//	while(tem --){ a.push_back(u.ss);}
			arr.push_back(u.ff);
		}else{
		//	while(tem --){	a.push_front(u.ss);}
			arr.push_front(u.ff);
		}
		col^=1;
	}
	cout << calc(arr);
//	cout << manhat({1,2,3});
}

 
int main(){
	int testcases = 1;
//	cin >> testcases;
	while(testcases --){
		solve(); if(testcases) cout << '\n';
	//	cout << endl;
	}
} 

Compilation message (stderr)

diversity.cpp: In function 'll manhat(std::vector<long long int>)':
diversity.cpp:41:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |  for(ll i = 0; i < v.size(); i ++){
      |                ~~^~~~~~~~~~
diversity.cpp: In function 'void solve()':
diversity.cpp:118:7: warning: unused variable 'tem' [-Wunused-variable]
  118 |   int tem = u.ff;
      |       ^~~
#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...