:. AcWing 244 개 수수께끼의 소 (펜윅 트리 + 반)

N-소, 1 ~ N의 높이로 알려진 다양하지만, 각 젖소의 정확한 높이를 모를 수 있습니다.

이제, n은 암소 서 소 이전 제가 알려져있다 I 는 각 암소의 높이를 필요 이상으로 아이 암소 이하이다.

입력 형식

1 호선 : 입력 정수 n.

첫번째 행 2..n : 라인 당 정수 제가 아이는 i 번째 행은 소가 I 갖는 것을 나타낸다 그 이하의 AI 소. (: 제 암소의 전면에는 소가 없기 때문에, 그래서 나열되지 않은 주)

출력 형식

N 개의 출력 라인 높이 정수 가축의 각 출력 라인을 포함하는 방법.

i 번째 행 I 암소 높이의 출력.

데이터 범위

1 N 10 5 1≤n≤105

샘플 입력 :

5
1
2
1
0

샘플 출력 :

2
4
5
3
1

해결 방법 :이 질문은 단지 N 헤드 높이가 동일하지 않기 때문에 소, 가축을 찾을 권리가있다, 그래서 우리는 지금까지 사용 된 소 가축의 현재 높이를 기록하는 나무와 같은 배열을 구축 할 수 있습니다 (값의 나무와 같은 배열 표현 펜윅 트리 기본 오름차순으로 행하기 때문에 현재의 모든 가축은 가축 그래서 지금 우리가보다 얼마나 많은 머리 인당 가축의 짧은 앞을 통과하는 역 할,) 높은 몇몇의 첫번째에서 사용되지 않는 것입니다 그 도착 어레이 (전류 값 자체가 소 도착 인 [I]는 + 1), 우리는 도착 소 어레이의 이진 트리를 찾는 [내가] + 1 개 높이, 그리고 트리에서 어레이에 기록 이 암소 뺀다, 상기 동작은 N 회 반복된다.

 

사용법 #include <iostream> 
#INCLUDE <cstdio> 사용 스페이스 성병; CONST의 INT maxn 1E5 + = 7 ; INT의 N;
INT의 트리 [maxn];    // 01标记N头牛是否使用过INT 도착 [maxn];
INT ANS [maxn]; INT lowbit ( INT X) {
     복귀 , X (- X); 
} 공극 추가 ( INT (X), INT 브로) {
     동안 (X <= N) { 
        트리 [X] + = 브로; 
        X + = lowbit (X);

 

 






 
    }
} 

int 치 ASK ( INT X) {
     INT RES = 0 ;
     그동안 (X> = 1이다. ) { 
        RES + = 트리 [X] 
        X - = lowbit (X) 
    } 
    리턴 RES; 
} 

INT (주) { 
    scanf와 ( " D의 % " , N-), 
    추가 ( . 1 , . 1 );     // 모든 가축이 추가 된 펜윅 나무 
    에 대한 ( int로 I = 2 ; I <= N-, 나는 ++ ) { 
        는 scanf ( " % D" , ARR [I]) 
        추가 (I, . 1 )] 
    } 
    에 대한 ( INT I = N-; I> = 1이다. ] 난 ...) {     // 반전 이송 소 찾아야 
        INT의 L이 = 1. , R & LT = N-;
         그동안 (L <R & LT) {         // 반 눌러보고 [I]가 소 + 1 도착 높이 현재 전면 암소 도착 [I] 그것보다 짧은 소로서 (순서, 제 자신 도착 [I은 ] 소 + 1) 
            값 int MID = (L + R 및 LT) >> 1 ;
             IF는 ((MID 문의) <ARR을 [I] + 1 ) { 
                L = MID + 1 ] 
            } 사람의 = {
                R & LTMID; 
            } 
        } 
        ANS [I] = & lt; 화학식 
        추가 (R & LT, - . 1 );     // 암소는 현재 사용되고 있기 때문에,이 (태그 배열을 제거 트리) 감산 있도록 
    }
      ( INT I = . (1) , I <= N-; I ++ ) { 
        의 printf ( " % D의 \의 N- " , ANS [I]) 
    } 
    리턴  0 ; 
}

 

추천

출처www.cnblogs.com/buhuiflydepig/p/11407336.html