질문 A : 죽여
제한 시간 : 1 초 메모리 제한 : 2백56메가바이트
얼굴 질문
그는 공개적으로 질문을 직면하지 않았다.
문제 해결
알고리즘의 80 %
경주는 긍정적 인 해결책을 기대하지만, 다른의 정확성을 확인하기 위해 더 욕심을 선택하지 않은 경우.
모든 이상한 위해, 우리는 타협 지점 거리의 가치에 무게를 정의합니다.
모두를위한 절반 대답은, 그가 연주 할 수있는 모든 책임을 고려하여 권리는 이상한 놀이의 최대를 선택합니다. 그래서 당신은 이상한 사람들이 남긴 작은 가중치를 시도 할 수 있습니다.
그러나이 중단됩니다. 우측 좀 이상에, 중간에 결제 시점 경우 고려하지만, 소수의 사람들이 비난 왼쪽,
그리고 대답은 우수하지 않습니다 원인, 이상한 잡아 수있는 권리 사람들에게 결제 점에서 상대적으로 가까운 거리를 떠났다.
복잡성 $ O (nmlog) $
100 % 알고리즘
N의 솔루션 플러스 절반 욕심 검증. 사람의 위치와 위치에 일종의 이상한입니다.
최종 응답의 절반입니다. 순서는 모두가 Daguai 순서 할 수있는 청소시기를 확인합니다. 당신은 모든 사람들이 이상한 놀이를 가지고 있는지 확인 할 수 있습니다.
복잡성 $ O (nlog) $
코드 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#INCLUDE는 <. 비트 / stdc ++ H> #define한다 INT RINT 등록 #DEFINE LL 긴 긴 #DEFINE () 판독 (A) A = INIT 사용 스페이스 성병; 인라인 INT의 초기화 () { INT A = 0 , B = 1 ; 숯 CH = getchar가 (); 동안 (CH2 < ' 0 ' || CH> ' 9 ' ) { 경우 (CH == ' - ' ) (B) = - 1 , CH = getchar가 ();} 동안 (CH2> = ' 0 '&& CH <=에서 ' 9 ' ) {A = (a << 3 ) + (A << 1 ) + CH- ' 0 ' , CH = getchar가 ();} 리턴 는 * B; } int로 N, M, S, ANS = 0x7fffffff ; INT의 페이지의 [ 5003 ], Q [ 5003 ], w [ 5003 ]; 불리언 힘 [ 5003 ]; 인라인 LL의 get_dis ( INT의 X, INT의 Y) { 창 1ll의 복근 * (Q [Y] -p [X]) + ABS (Q [Y] - (S)); } 인라인 부울 검사 (LL 중반) { INTJ = 1 ; 대 (RINT I = 1 ; I <= N; ++ I) { 동안 (j <= m) { 경우 (get_dis (I, J) <= MID) {J ++; 휴식 ;} J를 ++ ; } 경우 ((j의 ==의 m + 1 ) && (나는 < N)) 반환 거짓 ; 경우 ((j의 ==의 m + 1 ) && (I == N) && get_dis N (m)> MID) 반환 거짓 ; } 반환 사실 ; } INT ) (메인 { (S) 판독 (m) 판독 (n)를 판독; 대 (RINT I = 1 ; I <= N; ++ I) 판독 (p [I]); 대 (RINT I = 1 ; I <= m; ++ I) 판독 (Q [I]); LL에서 L = 0 , R = 0x7fffffffffffffff ; 정렬 (p + 1 , N + P + 1 ), 정렬 방법 (Q + 1 , Q + m + 1 ); 반면 (L <= R) { 중간 LL = (L + R) >> 1 ; 만약 (! 검사 (MID)) L = 중간 + 1 ; 또 , R = 미드 1 ; } 의 printf ( " % LLD \ 없음 " , l); 반환 0 ; }