이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "cross.h"
// #include <iostream>
#include <algorithm>
#include <queue>
#define ll long long
ll get_area(ll i, ll o) {
return i*(o*2-i);
}
long long SelectCross(int K, std::vector<int> I, std::vector<int> O) {
int N = I.size();
std::vector<int> idx;
for (int i = 0; i < N; i++) {
idx.push_back(i);
}
std::sort(idx.begin(), idx.end(), [I](int ia, int ib){
return I[ia] > I[ib];
});
auto cmp = [O](int ia, int ib){
return O[ia] > O[ib];
};
std::priority_queue<int, std::vector<int>, decltype(cmp)> queue(cmp);
int ci = I[idx[K-1]];
for(int i = 0; i < K; i++) {
queue.push(idx[i]);
}
ll co = O[queue.top()];
ll max_area = get_area(ci, co);
for (int i = K; i < N; i++) {
if (O[idx[i]] <= co) continue;
queue.pop();
queue.push(idx[i]);
ci = I[idx[i]];
co = O[queue.top()];
ll area = get_area(ci, co);
if (area > max_area) max_area = area;
}
return max_area;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |