이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
template <class T>
using Vec = std::vector<T>;
using ll = long long;
constexpr ll INF = 1000000000;
constexpr ll MAX = 200000000;
struct Event {
Vec<int> query;
Vec<int> remove;
Event(): query(), remove() { }
};
int main() {
int N, K, Q;
std::cin >> N >> K >> Q;
Vec<ll> X(N), A(N), B(N);
Vec<int> T(N);
for (int i = 0; i < N; ++i) {
std::cin >> X[i] >> T[i] >> A[i] >> B[i];
assert(A[i] == 1);
X[i] *= 2;
T[i] -= 1;
}
Vec<ll> L(Q), Y(Q);
for (int i = 0; i < Q; ++i) {
std::cin >> L[i] >> Y[i];
L[i] *= 2;
}
Vec<std::multiset<ll>> store(K);
std::map<ll, ll> map;
for (int i = 0; i < N; ++i) {
store[T[i]].insert(X[i]);
}
const auto add = [&](const ll x, const ll y) {
if (map.empty()) {
map.emplace(x, y);
return;
}
while (map.begin() -> first <= x) {
auto itr = std::prev(map.upper_bound(x));
if (itr -> second - (x - itr -> first) >= y) {
return;
}
if (y - (x - itr -> first) >= itr -> second) {
map.erase(itr);
}
else {
break;
}
}
while (map.rbegin() -> first >= x) {
auto itr = map.lower_bound(x);
if (itr -> second - (itr -> first - x) >= y) {
return;
}
if (y - (itr -> first - x) >= itr -> second) {
map.erase(itr);
}
else {
break;
}
}
map.emplace(x, y);
};
const auto get = [&](const ll x) {
ll ret = 0;
{
auto itr = std::prev(map.upper_bound(x));
ret = std::max(ret, itr -> second - (x - itr -> first));
}
{
auto itr = map.lower_bound(x);
ret = std::max(ret, itr -> second - (itr -> first - x));
}
return ret;
};
for (int i = 0; i < K; ++i) {
store[i].insert(-INF);
store[i].insert(INF);
auto itr = store[i].begin();
while (std::next(itr) != store[i].end()) {
const auto mid = (*std::next(itr) + *itr) / 2;
const auto len = (*std::next(itr) - *itr) / 2;
add(mid, len);
++itr;
}
}
for (int i = 0; i < Q; ++i) {
const auto ans = get(L[i]);
if (ans == MAX) {
std::cout << -1 << '\n';
}
else {
std::cout << ans / 2 << '\n';
}
}
// std::map<ll, Event> map;
// for (int i = 0; i < N; ++i) {
// }
return 0;
}
# | 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... |