이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
using namespace std;
using ll = long long;
int main()
{
int N, Q;
cin >> N >> Q;
vector<int> ct(1+300'000, 0);
for(int i = 1; i <= N; i++)
{
int a;
cin >> a;
ct[a]++;
}
int l, r;
cin >> l >> r;
vector<ll> val;
for(int f = 1; f <= 300'000; f++)
if(ct[f])
val.push_back(ct[f]);
sort(val.begin(), val.end(), [] (int u, int v)
{
return u > v;
});
deque<ll> val2;
for(int i = 0; i < int(val.size()); i++)
{
if(i % 2 == 0) val2.push_back(val[i]);
else val2.push_front(val[i]);
}
val2.push_front(0);
int G = int(val2.size()) - 1;
vector<ll> prefsum(1+G, 0);
for(int i = 1; i <= G; i++) prefsum[i] = prefsum[i-1] + val2[i];
// for(int f = 1; f <= G; f++) cerr << val2[f] << ' ';
// cerr << '\n';
ll res = 0;
for(int i = 1; i <= G; i++)
{
res += (val2[i]*(val2[i]+1))/2 + prefsum[i-1]*val2[i] + (prefsum[G] - prefsum[i])*val2[i] + (prefsum[i-1])*(prefsum[G] - prefsum[i]);
// cerr << "!\n";
// cerr << (prefsum[G] - prefsum[i])*val2[i] << '\n';
// cerr << (val2[i]*(val2[i]+1))/2 << '\n';
// cerr << prefsum[i-1]*val2[i] << '\n';
// cerr << (prefsum[i-1])*(prefsum[G] - prefsum[i]) << '\n';
// cerr << i << " : " << (val2[i]*(val2[i]+1))/2 + prefsum[i-1]*val2[i] + (prefsum[G] - prefsum[i])*val2[i] * (prefsum[i-1])*(prefsum[G] - prefsum[i]);
// cerr << '\n';
}
cout << res << '\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |