이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define int long long
int N, K, X, Y;
vector<int> x, y;
vector<vector<int>> fenwick;
void update(int i, int j1, bool b) {
for (; i <= X; i += i & -i) {
for (int j = j1; j <= Y; j += j & -j) {
if (b) fenwick[i][j]++;
else fenwick[i][j]--;
}
}
}
int query(int i, int j1) {
int S = 0;
for (; i > 0; i -= i & -i) {
for (int j = j1; j > 0; j -= j & -j) {
S += fenwick[i][j];
}
}
return S;
}
bool check(int d) {
int x1, y1, S = 0, ia, ib, ic, id;
vector<int> xcrit, xdisc, ycrit, ydisc;
for (int i = 0; i < N; i++) {
x1 = x[i];
y1 = y[i];
xcrit.push_back(x1 - y1 - d);
xcrit.push_back(x1 - y1);
xcrit.push_back(x1 - y1 + d);
ycrit.push_back(x1 + y1 - d);
ycrit.push_back(x1 + y1);
ycrit.push_back(x1 + y1 + d);
}
xdisc = xcrit;
ydisc = ycrit;
sort(xdisc.begin(), xdisc.end());
sort(ydisc.begin(), ydisc.end());
xdisc.erase(unique(xdisc.begin(), xdisc.end()), xdisc.end());
ydisc.erase(unique(ydisc.begin(), ydisc.end()), ydisc.end());
X = xdisc.size();
Y = ydisc.size();
fenwick = vector<vector<int>>(X + 1, vector<int>(Y + 1));
for (int i = 0; i < N; i++) {
x1 = x[i];
y1 = y[i];
ia = lower_bound(xdisc.begin(), xdisc.end(), x1 - y1) - xdisc.begin() + 1;
ib = lower_bound(ydisc.begin(), ydisc.end(), x1 + y1) - ydisc.begin() + 1;
if ((S += query(ia, ib)) >= K) return true;
ia = lower_bound(xdisc.begin(), xdisc.end(), x1 - y1 - d) - xdisc.begin() + 1;
ib = lower_bound(xdisc.begin(), xdisc.end(), x1 - y1 + d) - xdisc.begin() + 1;
ic = lower_bound(ydisc.begin(), ydisc.end(), x1 + y1 - d) - ydisc.begin() + 1;
id = lower_bound(ydisc.begin(), ydisc.end(), x1 + y1 + d) - ydisc.begin() + 1;
update(ia, ic, 1);
update(ib + 1, ic, 0);
update(ia, id + 1, 0);
update(ib + 1, id + 1, 1);
}
return false;
}
signed main() {
cin >> N >> K;
x.resize(N);
y.resize(N);
for (int i = 0; i < N; i++) cin >> x[i] >> y[i];
int l = 0, r = 4e9, m, ans;
while (l <= r) {
m = (l + r) >> 1;
if (check(m)) {
ans = m;
r = --m;
} else {
l = ++m;
}
}
cout << ans;
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... |