암호:
#INCLUDE <비트 / stdc ++. H> #DEFINE 줄게 긴 긴 #DEFINE의 maxn 200000 #DEFINE의 INF 100000000000000 #DEFINE의 LSON (t [X] .ch [0]) #DEFINE의 rson (t [X] .ch [1]) #DEFINE 미드 ((L + R) >> 1) 네임 스페이스를 사용하여 표준; 무효 디버그 () { printf와 ( "no_problem \ 없음"); } INT의 N, K, D, 루트; setIO (문자열들) 무효화 { 가 S +. "IN"의 문자열; freopen을 (in.c_str (), "R", 표준 입력); } priority_queue <LL 벡터 <LL> 큰 <LL>> Q; 구조체 노드 { INT의 P [2], CH [2] minv [2] maxv [2]; t} [maxn] T; 부울 CMP (노드 A, 노드 B) { ? AP [D] == BP [D] AP를 반환 [D ^ 1] <BP [D ^ 1] : AP [D] <BP [D] } 공극 팔 굽혀 펴기 (INT의 X, Y의 INT) { t [X] .minv [0] = 분 (t [X] .minv [0], t [Y] .minv [0]); t [X] .maxv [0] = 최대 (t [X] .maxv [0], t [Y] .maxv [0]); t는 [X] .minv [1] 분 (t를 [X] .minv [1], t [Y] .minv [1]) =; t [X] .maxv [1] = 최대 (t [X] .maxv [1], t [Y] .maxv [1]); } INT 빌드 (INT의 L, R의 INT, INT O) { D = O; nth_element (t + 1, t + 미드, t + 1 개 + R, CMP); t [미드] .minv [0] = t의 [미드] .maxv [0] = t의 [미드] .P [0]; t [미드] .minv [1] = t의 [미드] .maxv [1] = t의 [미드] .P [1]; t는 [중반] .ch [0] = t의 [미드] .ch [1] = 0; (MID> l) 경우에 { t [미드] [0] = .ch 구축 (L, 중앙 1, o ^ 1); 팔 굽혀 펴기 (MID, t [미드] .ch [0]); } 경우 (R> 중간) { t [미드] [1] = .ch 구축 (MID + 1이고, o ^ 1); 팔 굽혀 펴기 (MID, t [미드] .ch [1]); } 중반를 반환; } LL 스퀘어 (LL의 X) { 창 X * X; } LL getmax INT (X) { LL ANS = 0; 경우 (나는 2 <; I = 0 값 int ++ I) { ANS + = 최대 (평방 (1ll * (t [X] .minv [I] -TP [I])), 스퀘어 (1ll * (t [X를 ] .maxv [I] -TP [I]))); } 반환 ANS; } 공극 해결할 INT (X, INT X1, INT Y1) { LL DN = getmax (X) CUR = 스퀘어 (1ll * (t [X] .P [0] - X1)) + 스퀘어 (1ll * (t의 [ X] .P [1] -Y1)); DN (<= Q.top ()) 돌아 가면; 경우 (현재> Q.top ()) { Q.pop (); Q.push (CUR); } 게요 DL = LSON? getmax (LSON) -INF; 게요 박사 = rson? getmax (rson) -INF; 경우 (DL> DR) { 경우 (DL> Q.top ()) 해결 (LSON, X1, Y1); 경우 (DR> Q.top ()) 해결 (rson, X1, Y1); } 다른 { 경우 (DR> Q.top ()) 해결 (rson, X1, Y1); 경우 (DL> Q.top ()) 해결 (LSON, X1, Y1); } } INT의 main () { // setIO ( "입력"); scanf와 ( "%의 D % d에", N, K); << K = 1; 경우 (; 나는 = <N; I ++ = 1 값 int I)는 scanf ( "%의 D % d에", t [i]는 .P [0], t [i]는 .P [1]); 난 = K를 <; 위해 (ⅰ = 1 int로; 경우 (; 나는 = <N; I = 1 값 int I ++) { Tp를 [0] = t의 [I] .P [0]; TP [1] = t의 [I] .P [1]; 해결 (루트 Tp를 [0] Tp를 [1]); } 의 printf ( "% LLD \ 없음"Q.top ()); 0을 반환; }