트리의 의장 (간격 k 번째로 큰 값)

인라인 공극 빌드 ( INT & k, INT의 L, INT의 R) { 
    K = node_cnt ++ ;
    경우 (L == R) ;
    int로 중간 = (L + R) / 2 ; 
    LC ([K], L, 미드)를 작성; 
    RC ([K], 중간 구축 + 1 , r)을; 
} 
인라인 INT는 (수정 INT의 K, INT의 L, INT의 r)을 {
     INT 각종 = ++ node_cnt; 
    액정 [oo의] RC [각종 = RC에 [K]; LC [K]를 합계 = [OO] = 합계 + [K] 1 ;
    경우 (L의 == 연구)반환 OO를;
    int로 중간 = (L + R) / 2 ;
    경우 (p <= MID)의 LC [의 각종 = 수정 (액정 [oo의, L, MID);
    다른 RC [각종 = 수정 (RC의 [oo의, 중간 + 1 , R);
    반환 OO를; 
} 
인라인 INT의 쿼리 ( int로 U, INT의 V, INT의 L, INT의 R, INT의 K) {
     INT 중간 = (L + R) / 2 ;
    INT CNT = 합 [LC [V] - 합 [액정 [U], ANS;
    경우 (L == R) 복귀 L;
    경우 (CNT> = K) = ANS쿼리 (LC [U] LC [V], L, 중, K);
    다른 세 = 쿼리 (RC [U], RC [V], 중간 + 1 , R, K의 CNT);
    반환 년; 
}

 

추천

출처www.cnblogs.com/Suiyue-Li/p/11256580.html