제출 #894850

#제출 시각아이디문제언어결과실행 시간메모리
894850vjudge1Diversity (CEOI21_diversity)C++11
64 / 100
58 ms7904 KiB
#include <bits/stdc++.h> #define pb push_back #define pf push_front using namespace std; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 3 * 1e5 + 10; const ll mod = 1e9 + 7; ll um(ll a, ll b){ return ((1LL * a * b) % mod + mod) % mod; } ll subr(ll a, ll b){ return ((1LL * a - b) % mod + mod) % mod; } ll add(ll a, ll b){ return (1LL * a + b) % mod; } ll binpow(ll x, ll step){ ll res = 1LL; while(step){ if(step & 1) res = um(res, x); x = um(x, x); step /= 2; } return res; } int arr[N]; pii place[N]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); ll n, q, cnt = 0; cin >> n >> q; for(ll i = 1; i <= n; i++){ cin >> arr[i]; } sort(arr + 1, arr + n + 1); vector <pii> vec; for(ll i = 1; i <= n; i++){ if(arr[i] != arr[i - 1]){ if(cnt > 0) vec.pb({cnt, arr[i - 1]}); cnt = 1; } else cnt++; } vec.pb({cnt, arr[n]}); sort(vec.begin(), vec.end()); int l = 0, r = (int)vec.size() - 1; for(int i = 0; i < (int)vec.size(); i++){ if(i % 2 == 0) place[l++] = vec[i]; else place[r--] = vec[i]; } l = 1; for(int i = 0; i < (int)vec.size(); i++){ for(int j = 0; j < place[i].F; j++){ arr[l++] = place[i].S; } } ll ans = 0, cur = 0; cnt = 0; for(ll i = 1; i <= n; i++){ if(arr[i] != arr[i - 1]) cnt++; cur += cnt; } for(ll i = 1; i <= n; i++){ ans += cur; cur--; if(arr[i] != arr[i + 1]) cur -= (n - i); } cout << ans; 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...