結果
| 問題 |
No.2436 Min Diff Distance
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-08-18 22:33:54 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,737 bytes |
| コンパイル時間 | 3,367 ms |
| コンパイル使用メモリ | 265,476 KB |
| 実行使用メモリ | 13,652 KB |
| 最終ジャッジ日時 | 2024-11-28 08:32:46 |
| 合計ジャッジ時間 | 11,226 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 WA * 1 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/segtree>
using namespace std;
using namespace atcoder;
const int INF = 1E9;
int min_op(int u, int v) { return min(u, v); }
int min_e() { return INF; }
int max_op(int u, int v) { return max(u, v); }
int max_e() { return -INF; }
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vector<int> x(n), y(n);
for (int i = 0; i < n; i++) {
cin >> x[i] >> y[i];
}
vector<int> mx(n, -INF), mi(n, INF);
auto solve = [&]() {
vector<int> p(n), prc(n);
iota(p.begin(), p.end(), 0);
iota(prc.begin(), prc.end(), 0);
sort(p.begin(), p.end(), [&](int u, int v) {
return tuple(x[u], y[u], u) < tuple(x[v], y[v], v);
});
sort(prc.begin(), prc.end(), [&](int u, int v) {
return tuple(y[u], u) < tuple(y[v], v);
});
vector<int> pos(n);
for (int i = 0; i < n; i++) {
pos[p[i]] = i;
}
segtree<int, min_op, min_e> mis(n);
segtree<int, max_op, max_e> mas(n);
for (int v : prc) {
int sum = x[v] + y[v];
mi[v] = min(mi[v], sum - mas.prod(0, pos[v]));
mx[v] = max(mx[v], sum - mis.prod(0, pos[v]));
mas.set(pos[v], sum);
mis.set(pos[v], sum);
}
};
for (int sx = 0; sx < 2; sx++) {
for (int sy = 0; sy < 2; sy++) {
solve();
transform(y.begin(), y.end(), y.begin(), [](int u) { return -u; });
}
transform(x.begin(), x.end(), x.begin(), [](int u) { return -u; });
}
int ans = INF;
for (int i = 0; i < n; i++) {
ans = min(ans, mx[i] - mi[i]);
}
cout << ans;
}