(대부분의 간격 차분 값) C - 균형 라인업 POJ - 3264

대부분의 간격 차이 값, 최대 세그먼트 트리, 최소 값을 유지한다. 쿼리는 MAX-분 결과

1 #INCLUDE <iostream>
 2 #INCLUDE <CString을>
 3 #INCLUDE <벡터>
 4 #INCLUDE <알고리즘>
 5  #DEFINE LSON의 L, m, 실온 << 1
 6  #DEFINE의 rson의 m + 1, R, RT << 1 | 1
 7  #DEFINE MEM (X)가 memset (X, 0는 sizeof (X))
 8  사용  스페이스 성병;
9  CONST의  INT의 INF = 9999999 ;
10  CONST의  INT의 maxn = 50000 + 5 ;
11  INT 미 [maxn << 4 ];
12  INT 마 [maxn <<4 ];
(13)  보이드 팔 굽혀 펴기 ( INT의 RT) {
 14      미 [RT] = 분 (MI [RT << 1 ] 미시건 [RT << 1 | 1 ]);
15      마 [RT] = 최대 (마 [RT << 1 ], MA [RT << 1 | 1 ]);
16  }
 17  공극 빌드 ( INT의 L, INT의 R, INT의 RT) {
 18      의 경우 (L == R) {
 19          는 scanf ( " %의 D " , 미 [RT]);
20          마 [RT] = 미 [RT];
(21)         반환 ;
22      }
 23      INT m = (L +의 연구) >> 1 ;
24      빌드 (LSON);
25      빌드 (rson);
26      팔 굽혀 펴기 (RT);
27  }
 28  
29 쌍 < INT , INT > 쿼리 ( INT L, INT R, INT의 L, INT의 R, INT의 RT) {
 30      의 경우 (L <= 1 && R> = R)
 31      {
 32          쌍 < INT , INT > P ( 미 [RT], MA [RT]);
(33)         // COUT << 미 [RT] << ''<< 마 [RT] << ENDL; 
34          리턴 P;
35          }
 36      INT m = (L +의 연구) >> 1 ;
37      쌍 < INT , INT > LV (INF, 0 ), RV (INF, 0 );
38      의 경우 (L <= m) LV = 쿼리 (L, R, LSON);
39      의 경우 (R> m) = RV 쿼리 (L, R, rson);
40      쌍 < INT , INT > P;
41      p.first = 분 (lv.first, rv.first);
42      p.second = 최대 (lv.second, rv.second);
     반환 P는;
44  }
 45  INT의 주 () {
 46      INT N; INT의 m;
47      CIN >> >> N m;
48      빌드 ( 1 N, 1 );
(49)      에 대한이 ( 값 int = 1을 1 ; I <= m; 내가 ++ ) {
 50          INT의 A, B;
51          는 scanf ( " % d 개 %의 D ' , A, 및 B);
52          쌍 < INT , INT > P;
53          p = 쿼리 (A, B, 1 , N,1 );
54      //     COUT << p.second << ''<< p.first << "SS"<< ENDL; 
55          의 printf ( " % D \ 없음 " , p.second-의 p.first);
56      }
 57      반환  0 ;
58 }

 

추천

출처www.cnblogs.com/Msmw/p/11201293.html