알고리즘 경연 대회 엔트리 고전 LA 4329 (펜윅 나무)

질문의 의미 :

  사람들의 행은 다른 용량의 값이 일치가, 일련 번호는하지만 둘 사이의 기술 수준에서, 두 사람 사이에 심판을 규정 할 수있다

문제 :

  

"알고리즘 경연 대회 엔트리 클래식 - 교육 가이드"분석 :


 

코드에 :

  

1 #INCLUDE <iostream>
 2 #INCLUDE <CString을>
 3  사용  스페이스 성병;
4  
5  CONST의  INT의 MAXA = 100000 + 10 ;
6  CONST의  INT의 maxn = 20000 + 10 ;
7  
8  INT A [maxn];
9  INT의 비트 [MAXA];
10  INT의 C [maxn];
11  INT의 D [maxn];
12  INT N;
13   ANS;
14  의 INT lowbit (INT (X))
 15  {
 16      반환 , X (- X);
17  }
 18  INT의 합 ( INT X)
 19  {
 20      INT의 RET = 0 ;
21 일      동안 (x> 0 )
 22      {
 23          RET + = 비트 [X];
24          X - = lowbit (X);
25      }
 26      리턴 RET;
27  }
 28  무효 업데이트 ( INT X)
 29  {
 30     반면 (X <= maxa- 1 )
 31      {
 32          ++ 비트 [X];
33          X + = lowbit (X);
34      }
 35  }
 36  INT 의 main ()
 37  {
 38      // IOS :: sync_with_stdio (FALSE); 
39      의 INT t;
40      // CIN >> t; 
41      는 scanf ( " %의 D " , t);
42      동안 (t-- )
 43      {
 44          의 ANS = 0 ;
(45)         memset 함수 (비트 0 , 는 sizeof (비트));
46          memset 함수 (C, 0 , 는 sizeof (c));
47          CIN >> N;
(48)          에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++ )
 49          {
 50              // CIN >> A [I]; 
51              는 scanf ( " %의 D " , & A [I]);
52          }
 53           ( int로 I = 1 ; I <= N- 1 ; I ++ )
 54          {
55 개              C [I]을 합 = (a [I] - 1 );
56              업데이트 (a [I]);
57          }
 58          memset 함수 (비트 0 , 는 sizeof (비트));
59          memset 함수 (d, 0 , 는 sizeof (d));
(60)          에 대한이 ( int로 , I> = 1은 N = 2 , 난 - )
 61          {
 62              (D)의 [내가] = 합 (a [I] - 1 );
63              업데이트 (a [I]);
64          }
 65           ( INT I = 2 ; I <= N-1 ; 내가 ++ )
 66              ANS + C = [I] * (NID [I]) + (IC [I] - 1 ) * D [I];
67          COUT << ANS << ENDL;
68  
(69)      }
 (70)       0 ;
71 }

 추신:

  초급 ING는 심하게 작성. 순전히 개인적인 용도로

추천

출처www.cnblogs.com/Crossea/p/11295661.html