#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
struct xy { int x, y, idx; }a[262626];
bool sort_x(xy a, xy b) {
if (a.x != b.x)return a.x < b.x;
return a.y < b.y;
}
bool sort_y(xy a, xy b) {
if (a.y != b.y)return a.y > b.y;
return a.x > b.x;
}
int T[2][1212121], TW[2][1212121], tn;
void insert_g(int type, int w, int g) {
T[type][tn + w] = g;
TW[type][tn + w] = tn+w;
for (int i = (w + tn) / 2; i > 0; i /= 2) {
T[type][i] = min(T[type][i * 2], T[type][i * 2 + 1]);
TW[type][i] = T[type][i * 2] <= T[type][i * 2 + 1] ? TW[type][i * 2] : TW[type][i * 2 + 1];
}
}
int n, k, mxv = 2e9+1;
pair<int, int>search_g(int type, int s, int e) {
s += tn; e += tn;
pair<int, int>res;
res.first = mxv;
while (s <= e) {
if (s % 2 == 1) {
if (res.first > T[type][s])res = { T[type][s],TW[type][s] };
s++;
}
if (e % 2 == 0) {
if (res.first > T[type][e])res = { T[type][e],TW[type][e] };
e--;
}
s /= 2; e /= 2;
}
return res;
}
vector<long long>dd;
int f(long long x, int flag) {
int i, j, pc;
vector<pair<int, int>>L, R;
for (i = 0; i < tn * 2; i++)T[0][i] = T[1][i] = mxv;
pc = 0; int ans = 0;
for (i = 0; i < n; i++) {
while (pc < k) {
auto sr = search_g(0, a[i].idx, n);
int v = sr.first, who = sr.second - tn;
if (v == mxv)break;
long long res = (long long)v - a[i].x - a[i].y;
if (res > x)break;
if (flag) dd.push_back(res);
L.push_back({ v,who }); insert_g(0, who, mxv);
pc++;
}
while (pc < k) {
auto sr = search_g(1, 0, a[i].idx);
int v = sr.first, who = sr.second - tn;
if (v == mxv)break;
long long res = (long long)v - a[i].y + a[i].x;
if (res > x)break;
if (flag) dd.push_back(res);
R.push_back({ v,who }); insert_g(1, who, mxv);
pc++;
}
for (auto v : L)insert_g(0, v.second, v.first);
for (auto v : R)insert_g(1, v.second, v.first);
L.clear(); R.clear();
insert_g(0, a[i].idx, a[i].x + a[i].y);
insert_g(1, a[i].idx, -a[i].x + a[i].y);
}
if (pc < k)return -1;
return 1;
}
int main() {
scanf("%d%d", &n, &k);
for (tn = 1; tn <= n; tn *= 2);
int i, j;
for (i = 0; i < n; i++)scanf("%d%d", &a[i].x, &a[i].y);
sort(a, a + n, sort_x);
for (i = 0; i < n; i++)a[i].idx = i;
sort(a, a + n, sort_y);
long long s = 1, e = 4e9+1, ans = 0;
while (s <= e) {
long long m = ((long long)s + e) / 2;
int R = f(m, 0);
if (R == -1) {
s = m + 1;
}
else {
e = m - 1;
ans = m;
}
}
f(ans - 1, 1);
sort(dd.begin(), dd.end());
for (auto v : dd)printf("%lld\n", v);
for (i = dd.size(); i < k; i++)printf("%lld\n", ans);
return 0;
}
Compilation message
road_construction.cpp: In function 'int f(long long int, int)':
road_construction.cpp:43:9: warning: unused variable 'j' [-Wunused-variable]
43 | int i, j, pc;
| ^
road_construction.cpp:46:14: warning: unused variable 'ans' [-Wunused-variable]
46 | pc = 0; int ans = 0;
| ^~~
road_construction.cpp: In function 'int main()':
road_construction.cpp:81:9: warning: unused variable 'j' [-Wunused-variable]
81 | int i, j;
| ^
road_construction.cpp:79:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
79 | scanf("%d%d", &n, &k);
| ~~~~~^~~~~~~~~~~~~~~~
road_construction.cpp:82:30: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
82 | for (i = 0; i < n; i++)scanf("%d%d", &a[i].x, &a[i].y);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1467 ms |
4944 KB |
Output is correct |
2 |
Correct |
1477 ms |
5024 KB |
Output is correct |
3 |
Correct |
1505 ms |
5168 KB |
Output is correct |
4 |
Correct |
1329 ms |
5084 KB |
Output is correct |
5 |
Correct |
1389 ms |
3836 KB |
Output is correct |
6 |
Correct |
11 ms |
332 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4211 ms |
14480 KB |
Output is correct |
2 |
Correct |
4219 ms |
14612 KB |
Output is correct |
3 |
Correct |
1109 ms |
4856 KB |
Output is correct |
4 |
Correct |
3712 ms |
14404 KB |
Output is correct |
5 |
Correct |
4025 ms |
14592 KB |
Output is correct |
6 |
Correct |
4053 ms |
14612 KB |
Output is correct |
7 |
Correct |
3924 ms |
13860 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5491 ms |
11288 KB |
Output is correct |
2 |
Correct |
4891 ms |
11288 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
1952 ms |
11416 KB |
Output is correct |
5 |
Correct |
2887 ms |
11460 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5491 ms |
11288 KB |
Output is correct |
2 |
Correct |
4891 ms |
11288 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
1952 ms |
11416 KB |
Output is correct |
5 |
Correct |
2887 ms |
11460 KB |
Output is correct |
6 |
Correct |
4782 ms |
11420 KB |
Output is correct |
7 |
Correct |
5333 ms |
11416 KB |
Output is correct |
8 |
Correct |
1 ms |
204 KB |
Output is correct |
9 |
Correct |
1 ms |
204 KB |
Output is correct |
10 |
Correct |
5258 ms |
11420 KB |
Output is correct |
11 |
Correct |
1810 ms |
11416 KB |
Output is correct |
12 |
Correct |
2893 ms |
11464 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1467 ms |
4944 KB |
Output is correct |
2 |
Correct |
1477 ms |
5024 KB |
Output is correct |
3 |
Correct |
1505 ms |
5168 KB |
Output is correct |
4 |
Correct |
1329 ms |
5084 KB |
Output is correct |
5 |
Correct |
1389 ms |
3836 KB |
Output is correct |
6 |
Correct |
11 ms |
332 KB |
Output is correct |
7 |
Correct |
4723 ms |
9416 KB |
Output is correct |
8 |
Correct |
4750 ms |
9452 KB |
Output is correct |
9 |
Correct |
1248 ms |
5048 KB |
Output is correct |
10 |
Correct |
3870 ms |
8608 KB |
Output is correct |
11 |
Correct |
3386 ms |
8476 KB |
Output is correct |
12 |
Correct |
2704 ms |
7216 KB |
Output is correct |
13 |
Correct |
3816 ms |
8016 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1467 ms |
4944 KB |
Output is correct |
2 |
Correct |
1477 ms |
5024 KB |
Output is correct |
3 |
Correct |
1505 ms |
5168 KB |
Output is correct |
4 |
Correct |
1329 ms |
5084 KB |
Output is correct |
5 |
Correct |
1389 ms |
3836 KB |
Output is correct |
6 |
Correct |
11 ms |
332 KB |
Output is correct |
7 |
Correct |
4211 ms |
14480 KB |
Output is correct |
8 |
Correct |
4219 ms |
14612 KB |
Output is correct |
9 |
Correct |
1109 ms |
4856 KB |
Output is correct |
10 |
Correct |
3712 ms |
14404 KB |
Output is correct |
11 |
Correct |
4025 ms |
14592 KB |
Output is correct |
12 |
Correct |
4053 ms |
14612 KB |
Output is correct |
13 |
Correct |
3924 ms |
13860 KB |
Output is correct |
14 |
Correct |
5491 ms |
11288 KB |
Output is correct |
15 |
Correct |
4891 ms |
11288 KB |
Output is correct |
16 |
Correct |
0 ms |
204 KB |
Output is correct |
17 |
Correct |
1952 ms |
11416 KB |
Output is correct |
18 |
Correct |
2887 ms |
11460 KB |
Output is correct |
19 |
Correct |
4782 ms |
11420 KB |
Output is correct |
20 |
Correct |
5333 ms |
11416 KB |
Output is correct |
21 |
Correct |
1 ms |
204 KB |
Output is correct |
22 |
Correct |
1 ms |
204 KB |
Output is correct |
23 |
Correct |
5258 ms |
11420 KB |
Output is correct |
24 |
Correct |
1810 ms |
11416 KB |
Output is correct |
25 |
Correct |
2893 ms |
11464 KB |
Output is correct |
26 |
Correct |
4723 ms |
9416 KB |
Output is correct |
27 |
Correct |
4750 ms |
9452 KB |
Output is correct |
28 |
Correct |
1248 ms |
5048 KB |
Output is correct |
29 |
Correct |
3870 ms |
8608 KB |
Output is correct |
30 |
Correct |
3386 ms |
8476 KB |
Output is correct |
31 |
Correct |
2704 ms |
7216 KB |
Output is correct |
32 |
Correct |
3816 ms |
8016 KB |
Output is correct |
33 |
Correct |
9673 ms |
15712 KB |
Output is correct |
34 |
Correct |
9468 ms |
20568 KB |
Output is correct |
35 |
Correct |
7880 ms |
19712 KB |
Output is correct |
36 |
Correct |
5146 ms |
18364 KB |
Output is correct |
37 |
Correct |
5084 ms |
18320 KB |
Output is correct |
38 |
Correct |
6388 ms |
19288 KB |
Output is correct |