// Zende bad Shoma nasime faghat !
#include <bits/stdc++.h>
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define debug(x) cerr << #x << " : " << x << '\n'
using namespace std;
typedef long long ll;
typedef long double ld;
typedef string str;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
const ll Mod = 1000000007LL;
const int N = 2e5 + 10;
const ll Inf = 2242545357980376863LL;
const ll Log = 30;
int n, k;
int L[N], R[N], U[N], D[N];
vector<int> uX, uY;
vector<pii> points;
void Done(){
while((int) points.size() < k) points.pb(pii(0, 0));
for(auto x : points) printf("%d %d\n", uX[x.F], uY[x.S]);
exit(0);
}
int mk[N];
bool In(pii P, int id){
return L[id] <= P.F && P.F <= R[id] && D[id] <= P.S && P.S <= U[id];
}
void On(pii P, int col){
for(int i = 0; i < n; i++){
if(L[i] <= P.F && P.F <= R[i] && D[i] <= P.S && P.S <= U[i] && !mk[i]) mk[i] = col;
}
points.pb(P);
}
void Off(int col){
for(int i = 0; i < n; i++)
if(mk[i] == col)
mk[i] = 0;
points.pop_back();
}
void Solve(int y){
if(y == 0){
for(int i = 0; i < n; i++)
if(!mk[i])
return ;
}
int mnx = N, mxx = -1;
for(int i = 0; i < n; i++)
if(!mk[i])
mnx = min(mnx, R[i]), mxx = max(mxx, L[i]);
if(mxx == -1){
for(int i = 0; i < y; i++) points.pb(pii(0, 0));
Done();
}
int mny = N, mxy = -1;
for(int i = 0; i < n; i++)
if(!mk[i])
mny = min(mny, U[i]), mxy = max(mxy, D[i]);
for(int px : {mnx, mxx}){
for(int py : {mny, mxy}){
On({px, py}, y);
Solve(y - 1);
Off(y);
}
}
}
const int N2 = N * 16;
vector<int> O[N2], I[N2];
void AddE(int u, int v){
O[u].pb(v);
I[v].pb(u);
}
void AddC(int u, int v){
//if(u == v);
AddE(u ^ 1, v);
AddE(v ^ 1, u);
}
void Ban(int u, int v){
AddC(u ^ 1, v ^ 1);
}
int mark[N2];
vector<int> top;
void DFS(int u){
mark[u] = 1;
for(auto adj : O[u]) if(!mark[adj]) DFS(adj);
top.pb(u);
}
void DFS(int u, int c){
mark[u] = c;
for(auto adj : I[u]) if(!mark[adj]) DFS(adj, c);
}
bool isst[N2];
void Main(){
int mnx = N, mxx = -1;
for(int i = 0; i < n; i++)
if(!mk[i])
mnx = min(mnx, R[i]), mxx = max(mxx, L[i]);
int mny = N, mxy = -1;
for(int i = 0; i < n; i++)
if(!mk[i])
mny = min(mny, U[i]), mxy = max(mxy, D[i]);
vector<pii> po;
vector<int> ln;
{ // Nodes
int st = 0;
for(int i = mnx + 1; i < mxx; i++)
po.pb({i, mny});
isst[st] = true;
for(int i = st; i + 1 < (int) po.size(); i++)
Ban(i << 1 | 1, (i + 1) << 1);
st = po.size();
/////////////////////
for(int i = mnx + 1; i < mxx; i++)
po.pb({i, mxy});
isst[st] = true;
for(int i = st; i + 1 < (int) po.size(); i++)
Ban(i << 1 | 1, (i + 1) << 1);
st = po.size();
/////////////////////
for(int i = mny + 1; i < mxy; i++)
po.pb({mnx, i});
isst[st] = true;
for(int i = st; i + 1 < (int) po.size(); i++)
Ban(i << 1 | 1, (i + 1) << 1);
st = po.size();
/////////////////////
for(int i = mny + 1; i < mxy; i++)
po.pb({mxx, i});
isst[st] = true;
for(int i = st; i + 1 < (int) po.size(); i++)
Ban(i << 1 | 1, (i + 1) << 1);
st = po.size();
}
int m = po.size();
for(int i = 0; i < m; i++) if(isst[i]) ln.pb(i);
ln.pb(m);
assert(ln.size() == 5);
int fst, la;
vector<pii> seg;
for(int i = 0; i < n; i++){
seg.clear();
/*for(int j = 0; j < 4; j++){
fst = -1; la = -1;
for(int l = ln[j]; l < ln[j + 1]; l++){
if(In(po[l], i)){
la = l;
if(fst == -1) fst = l;
}
}
if(fst == -1) continue;
seg.pb({fst, la});
}
*/
// 1
if(D[i] <= mny){
fst = max(mnx + 1, L[i]) - (mnx + 1);
la = min(mxx - 1, R[i]) - (mnx + 1);
if(fst <= la) seg.pb(pii(fst + ln[0], la + ln[0]));
}
// 2
if(U[i] >= mxy){
fst = max(mnx + 1, L[i]) - (mnx + 1);
la = min(mxx - 1, R[i]) - (mnx + 1);
if(fst <= la) seg.pb(pii(fst + ln[1], la + ln[1]));
}
// 3
if(L[i] <= mnx){
fst = max(mny + 1, D[i]) - (mny + 1);
la = min(mxy - 1, U[i]) - (mny + 1);
if(fst <= la) seg.pb(pii(fst + ln[2], la + ln[2]));
}
// 4
if(R[i] >= mxx){
fst = max(mny + 1, D[i]) - (mny + 1);
la = min(mxy - 1, U[i]) - (mny + 1);
if(fst <= la) seg.pb(pii(fst + ln[3], la + ln[3]));
}
if(seg.empty() || seg.size() > 2) continue;
if(seg.size() == 1){
AddC(seg[0].S << 1 | 1, seg[0].S << 1 | 1);
if(!isst[seg[0].F])
AddC((seg[0].F - 1) << 1, (seg[0].F - 1) << 1);
} else {
vector<int> B[2];
for(int j = 0; j < 2; j++){
B[j].pb(seg[j].S << 1 | 0);
if(!isst[seg[j].F])
B[j].pb((seg[j].F - 1) << 1 | 1);
}
for(int b1 : B[0]) for(int b2 : B[1]) Ban(b1, b2);
}
}
for(int i = 0; i < m + m; i++){
if(!mark[i]) DFS(i);
}
reverse(all(top));
memset(mark, 0, sizeof mark);
int cnt = 1;
for(auto x : top) if(!mark[x]){
DFS(x, cnt);
cnt ++;
}
vector<int> val(m, 0);
for(int i = 0; i < m; i++)
val[i] = (mark[i + i] < mark[i + i + 1] ? 1 : 0);
for(int j = 0; j < 4; j++){
for(int l = ln[j]; l < ln[j + 1]; l++){
if(val[l]){
points.pb(po[l]);
break;
}
}
}
Done();
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++) scanf("%d%d%d%d", L + i, D + i, R + i, U + i);
for(int i = 0; i < n; i++) uX.pb(L[i]), uY.pb(D[i]), uX.pb(R[i]), uY.pb(U[i]);
sort(all(uX)); uX.resize(unique(all(uX)) - uX.begin());
sort(all(uY)); uY.resize(unique(all(uY)) - uY.begin());
for(int i = 0; i < n; i++){
L[i] = lower_bound(all(uX), L[i]) - uX.begin();
R[i] = lower_bound(all(uX), R[i]) - uX.begin();
U[i] = lower_bound(all(uY), U[i]) - uY.begin();
D[i] = lower_bound(all(uY), D[i]) - uY.begin();
}
//assert(k <= 3);
Solve(k);
assert(k == 4);
Main();
return 0;
}
/*
4 4
1 4 1 4
2 1 2 1
3 0 3 0
4 3 4 3
*/
Compilation message
hamburg.cpp: In function 'int main()':
hamburg.cpp:250:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
250 | scanf("%d%d", &n, &k);
| ~~~~~^~~~~~~~~~~~~~~~
hamburg.cpp:251:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
251 | for(int i = 0; i < n; i++) scanf("%d%d%d%d", L + i, D + i, R + i, U + i);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
118 ms |
150800 KB |
Output is correct |
2 |
Correct |
113 ms |
150844 KB |
Output is correct |
3 |
Correct |
115 ms |
150768 KB |
Output is correct |
4 |
Correct |
111 ms |
150760 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
116 ms |
150800 KB |
Output is correct |
2 |
Correct |
119 ms |
150928 KB |
Output is correct |
3 |
Correct |
112 ms |
150804 KB |
Output is correct |
4 |
Correct |
110 ms |
150720 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
116 ms |
150776 KB |
Output is correct |
2 |
Correct |
110 ms |
150776 KB |
Output is correct |
3 |
Correct |
113 ms |
150776 KB |
Output is correct |
4 |
Correct |
115 ms |
150760 KB |
Output is correct |
5 |
Correct |
108 ms |
150744 KB |
Output is correct |
6 |
Correct |
112 ms |
150708 KB |
Output is correct |
7 |
Correct |
126 ms |
150768 KB |
Output is correct |
8 |
Correct |
114 ms |
150776 KB |
Output is correct |
9 |
Correct |
115 ms |
150832 KB |
Output is correct |
10 |
Correct |
116 ms |
150776 KB |
Output is correct |
11 |
Correct |
111 ms |
150776 KB |
Output is correct |
12 |
Correct |
112 ms |
150776 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
115 ms |
150820 KB |
Output is correct |
2 |
Correct |
121 ms |
150776 KB |
Output is correct |
3 |
Correct |
113 ms |
150776 KB |
Output is correct |
4 |
Correct |
123 ms |
150728 KB |
Output is correct |
5 |
Correct |
115 ms |
150812 KB |
Output is correct |
6 |
Correct |
115 ms |
150788 KB |
Output is correct |
7 |
Correct |
126 ms |
150752 KB |
Output is correct |
8 |
Correct |
113 ms |
150764 KB |
Output is correct |
9 |
Correct |
121 ms |
150776 KB |
Output is correct |
10 |
Correct |
115 ms |
150776 KB |
Output is correct |
11 |
Correct |
128 ms |
150776 KB |
Output is correct |
12 |
Correct |
116 ms |
150868 KB |
Output is correct |
13 |
Correct |
131 ms |
150848 KB |
Output is correct |
14 |
Correct |
132 ms |
164272 KB |
Output is correct |
15 |
Correct |
126 ms |
150776 KB |
Output is correct |
16 |
Correct |
135 ms |
150824 KB |
Output is correct |
17 |
Correct |
136 ms |
164472 KB |
Output is correct |
18 |
Correct |
120 ms |
150904 KB |
Output is correct |
19 |
Correct |
124 ms |
150892 KB |
Output is correct |
20 |
Correct |
128 ms |
164692 KB |
Output is correct |
21 |
Correct |
121 ms |
150704 KB |
Output is correct |
22 |
Correct |
121 ms |
150756 KB |
Output is correct |
23 |
Correct |
130 ms |
164816 KB |
Output is correct |
24 |
Correct |
120 ms |
150712 KB |
Output is correct |
25 |
Correct |
113 ms |
150752 KB |
Output is correct |
26 |
Correct |
123 ms |
150776 KB |
Output is correct |
27 |
Correct |
116 ms |
150704 KB |
Output is correct |
28 |
Correct |
115 ms |
150752 KB |
Output is correct |
29 |
Correct |
111 ms |
150776 KB |
Output is correct |
30 |
Correct |
121 ms |
150776 KB |
Output is correct |
31 |
Correct |
132 ms |
164472 KB |
Output is correct |
32 |
Correct |
125 ms |
164088 KB |
Output is correct |
33 |
Correct |
128 ms |
164292 KB |
Output is correct |
34 |
Correct |
128 ms |
164344 KB |
Output is correct |
35 |
Correct |
136 ms |
164792 KB |
Output is correct |
36 |
Correct |
137 ms |
164200 KB |
Output is correct |
37 |
Correct |
135 ms |
165068 KB |
Output is correct |
38 |
Correct |
134 ms |
165112 KB |
Output is correct |
39 |
Correct |
135 ms |
164464 KB |
Output is correct |
40 |
Correct |
128 ms |
164344 KB |
Output is correct |
41 |
Correct |
131 ms |
164472 KB |
Output is correct |
42 |
Correct |
137 ms |
164472 KB |
Output is correct |
43 |
Correct |
141 ms |
164600 KB |
Output is correct |
44 |
Correct |
138 ms |
164600 KB |
Output is correct |
45 |
Correct |
120 ms |
150756 KB |
Output is correct |
46 |
Correct |
136 ms |
164728 KB |
Output is correct |
47 |
Correct |
137 ms |
164652 KB |
Output is correct |
48 |
Correct |
133 ms |
164984 KB |
Output is correct |
49 |
Correct |
134 ms |
164600 KB |
Output is correct |
50 |
Correct |
129 ms |
164472 KB |
Output is correct |
51 |
Correct |
127 ms |
164948 KB |
Output is correct |
52 |
Correct |
128 ms |
164344 KB |
Output is correct |
53 |
Correct |
134 ms |
164472 KB |
Output is correct |
54 |
Correct |
126 ms |
164888 KB |
Output is correct |
55 |
Correct |
140 ms |
164472 KB |
Output is correct |
56 |
Correct |
143 ms |
164472 KB |
Output is correct |
57 |
Correct |
132 ms |
164480 KB |
Output is correct |
58 |
Correct |
135 ms |
164472 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
118 ms |
150800 KB |
Output is correct |
2 |
Correct |
113 ms |
150844 KB |
Output is correct |
3 |
Correct |
115 ms |
150768 KB |
Output is correct |
4 |
Correct |
111 ms |
150760 KB |
Output is correct |
5 |
Correct |
486 ms |
157908 KB |
Output is correct |
6 |
Correct |
514 ms |
157976 KB |
Output is correct |
7 |
Correct |
494 ms |
157960 KB |
Output is correct |
8 |
Correct |
476 ms |
158092 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
116 ms |
150800 KB |
Output is correct |
2 |
Correct |
119 ms |
150928 KB |
Output is correct |
3 |
Correct |
112 ms |
150804 KB |
Output is correct |
4 |
Correct |
110 ms |
150720 KB |
Output is correct |
5 |
Correct |
487 ms |
157908 KB |
Output is correct |
6 |
Correct |
539 ms |
157912 KB |
Output is correct |
7 |
Correct |
554 ms |
157948 KB |
Output is correct |
8 |
Correct |
507 ms |
157904 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
116 ms |
150776 KB |
Output is correct |
2 |
Correct |
110 ms |
150776 KB |
Output is correct |
3 |
Correct |
113 ms |
150776 KB |
Output is correct |
4 |
Correct |
115 ms |
150760 KB |
Output is correct |
5 |
Correct |
108 ms |
150744 KB |
Output is correct |
6 |
Correct |
112 ms |
150708 KB |
Output is correct |
7 |
Correct |
126 ms |
150768 KB |
Output is correct |
8 |
Correct |
114 ms |
150776 KB |
Output is correct |
9 |
Correct |
115 ms |
150832 KB |
Output is correct |
10 |
Correct |
116 ms |
150776 KB |
Output is correct |
11 |
Correct |
111 ms |
150776 KB |
Output is correct |
12 |
Correct |
112 ms |
150776 KB |
Output is correct |
13 |
Correct |
519 ms |
157976 KB |
Output is correct |
14 |
Correct |
514 ms |
158092 KB |
Output is correct |
15 |
Correct |
517 ms |
157972 KB |
Output is correct |
16 |
Correct |
490 ms |
157940 KB |
Output is correct |
17 |
Correct |
496 ms |
157912 KB |
Output is correct |
18 |
Correct |
486 ms |
157912 KB |
Output is correct |
19 |
Correct |
501 ms |
157964 KB |
Output is correct |
20 |
Correct |
528 ms |
157912 KB |
Output is correct |
21 |
Correct |
704 ms |
157904 KB |
Output is correct |
22 |
Correct |
612 ms |
157912 KB |
Output is correct |
23 |
Correct |
617 ms |
158076 KB |
Output is correct |
24 |
Correct |
583 ms |
158008 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
115 ms |
150820 KB |
Output is correct |
2 |
Correct |
121 ms |
150776 KB |
Output is correct |
3 |
Correct |
113 ms |
150776 KB |
Output is correct |
4 |
Correct |
123 ms |
150728 KB |
Output is correct |
5 |
Correct |
115 ms |
150812 KB |
Output is correct |
6 |
Correct |
115 ms |
150788 KB |
Output is correct |
7 |
Correct |
126 ms |
150752 KB |
Output is correct |
8 |
Correct |
113 ms |
150764 KB |
Output is correct |
9 |
Correct |
121 ms |
150776 KB |
Output is correct |
10 |
Correct |
115 ms |
150776 KB |
Output is correct |
11 |
Correct |
128 ms |
150776 KB |
Output is correct |
12 |
Correct |
116 ms |
150868 KB |
Output is correct |
13 |
Correct |
131 ms |
150848 KB |
Output is correct |
14 |
Correct |
132 ms |
164272 KB |
Output is correct |
15 |
Correct |
126 ms |
150776 KB |
Output is correct |
16 |
Correct |
135 ms |
150824 KB |
Output is correct |
17 |
Correct |
136 ms |
164472 KB |
Output is correct |
18 |
Correct |
120 ms |
150904 KB |
Output is correct |
19 |
Correct |
124 ms |
150892 KB |
Output is correct |
20 |
Correct |
128 ms |
164692 KB |
Output is correct |
21 |
Correct |
121 ms |
150704 KB |
Output is correct |
22 |
Correct |
121 ms |
150756 KB |
Output is correct |
23 |
Correct |
130 ms |
164816 KB |
Output is correct |
24 |
Correct |
120 ms |
150712 KB |
Output is correct |
25 |
Correct |
113 ms |
150752 KB |
Output is correct |
26 |
Correct |
123 ms |
150776 KB |
Output is correct |
27 |
Correct |
116 ms |
150704 KB |
Output is correct |
28 |
Correct |
115 ms |
150752 KB |
Output is correct |
29 |
Correct |
111 ms |
150776 KB |
Output is correct |
30 |
Correct |
121 ms |
150776 KB |
Output is correct |
31 |
Correct |
132 ms |
164472 KB |
Output is correct |
32 |
Correct |
125 ms |
164088 KB |
Output is correct |
33 |
Correct |
128 ms |
164292 KB |
Output is correct |
34 |
Correct |
128 ms |
164344 KB |
Output is correct |
35 |
Correct |
136 ms |
164792 KB |
Output is correct |
36 |
Correct |
137 ms |
164200 KB |
Output is correct |
37 |
Correct |
135 ms |
165068 KB |
Output is correct |
38 |
Correct |
134 ms |
165112 KB |
Output is correct |
39 |
Correct |
135 ms |
164464 KB |
Output is correct |
40 |
Correct |
128 ms |
164344 KB |
Output is correct |
41 |
Correct |
131 ms |
164472 KB |
Output is correct |
42 |
Correct |
137 ms |
164472 KB |
Output is correct |
43 |
Correct |
141 ms |
164600 KB |
Output is correct |
44 |
Correct |
138 ms |
164600 KB |
Output is correct |
45 |
Correct |
120 ms |
150756 KB |
Output is correct |
46 |
Correct |
136 ms |
164728 KB |
Output is correct |
47 |
Correct |
137 ms |
164652 KB |
Output is correct |
48 |
Correct |
133 ms |
164984 KB |
Output is correct |
49 |
Correct |
134 ms |
164600 KB |
Output is correct |
50 |
Correct |
129 ms |
164472 KB |
Output is correct |
51 |
Correct |
127 ms |
164948 KB |
Output is correct |
52 |
Correct |
128 ms |
164344 KB |
Output is correct |
53 |
Correct |
134 ms |
164472 KB |
Output is correct |
54 |
Correct |
126 ms |
164888 KB |
Output is correct |
55 |
Correct |
140 ms |
164472 KB |
Output is correct |
56 |
Correct |
143 ms |
164472 KB |
Output is correct |
57 |
Correct |
132 ms |
164480 KB |
Output is correct |
58 |
Correct |
135 ms |
164472 KB |
Output is correct |
59 |
Correct |
517 ms |
157972 KB |
Output is correct |
60 |
Correct |
518 ms |
158040 KB |
Output is correct |
61 |
Correct |
479 ms |
157912 KB |
Output is correct |
62 |
Correct |
498 ms |
157968 KB |
Output is correct |
63 |
Correct |
520 ms |
157872 KB |
Output is correct |
64 |
Correct |
504 ms |
157912 KB |
Output is correct |
65 |
Correct |
682 ms |
158032 KB |
Output is correct |
66 |
Incorrect |
2115 ms |
289928 KB |
Output isn't correct |
67 |
Halted |
0 ms |
0 KB |
- |