제출 #1169536

#제출 시각아이디문제언어결과실행 시간메모리
1169536Troll321Diversity (CEOI21_diversity)C++20
64 / 100
241 ms20160 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const ll MAXN = 3e5 + 5;
const ll MAXQ = 5e4 + 5;
const ll MAX = 1e18;

ll n, q, k = 0, ans = MAX;
//								Compressed Cnt
ll cnt[MAXN], compressed[MAXN], ccnt[MAXN];
vector<ll> vec; 
set<ll> st;

ll count(ll iniIdx, ll sum[]) {
	ll out = 0, bef = 0;
	for (int i = iniIdx; i <= k; i+=2) {
		ll after = sum[(iniIdx+1)%2] + (sum[iniIdx%2]-bef-ccnt[i]);
		out += bef*bef + after*after;
		bef += ccnt[i];
	}

	return out;
}

ll calc() {
	ll out = n*k*(n+1) - n*(k-1);
	ll sqSum = 0;

	sort(ccnt+1, ccnt+k+1);

	ll sum[2] = {0,0};

	for (int i = 1; i <= k; ++i) {
		sum[i%2] += ccnt[i];
	}

	sqSum += count(1, sum);
	sqSum += count(2, sum);

	out = (out - sqSum) / 2;
	return out;
}

void compress() {
	for (auto it = st.begin(); it != st.end(); it++) {
		k++;
		compressed[(*it)] = k;
		ccnt[k] = cnt[(*it)];
	}
}

int main() {
	cin >> n >> q;
	for (int i = 1; i <= n; ++i) {
		ll tmp; cin >> tmp;
		st.insert(tmp);
		cnt[tmp]++;
	}

	compress();

	ll _tmp;
	cin >> _tmp >> _tmp;

	for (int i = 1; i <= k; ++i) {
		vec.push_back(i);
	}

	sort(vec.begin(), vec.end());

	ans = calc();

	cout << ans << "\n";
	return 0;
}
#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...