제목 설명
서번트는 스마트하고있는 사람입니다. 그는 분명 자신의 계정을하기 위해 전체 부자, 부자로 10 년 동안 일했다. 요구 사항 집사 K 시간을 하루에 계정, 스마트하고있는 집사, 가정부를 기억하고, 따라서 항상 풍부한 만족합니다. 그러나, 일부 도발에, 부자 또는 가정부는 의심을했다. a의 계좌 번호가 b에 : 그래서 그는 각 번호 1, 2에 따라 충실한 청지기에게 자신의 계정을 결정하는 특별한 방법을 사용하기로 결정, ..., 때때로 다음 가정부 문제를 질문, 문제는 그런 것입니다 최소 합계는 무엇입니까? 가정부는 그는 항상 잘못된 문제였다 번 이상 물어 시간이 없었다 수 있도록하기 위해.
입력 형식
첫 번째 행은 문제가 N이 N을 나타내고 있고, N <= 100,000 개의 입력 번호 m을 가지며, N (m <= 100,000) T 계정 m을 나타냈다.
돈 계정의 두 번째 행 번호 m, 각각 수
N n은 뒷줄에 문제가 있으며, 각 행은 두 인물이 계정의 수의 종말의 시작을 보여있다.
출력 형식
각 질문에 대한 답에 대한 출력 파일. 구체적인 예를 볼 수 있습니다.
샘플 입출력
입력 # 1
10 3 1 2 3 4 5 6 7 8 9 10 2 7 3 9 110
출력 # 1
1 2 3
문제 해결
이 세그먼트 템플릿 트리의 주제이다. : 나는 템플릿에서 트리 라인을 참조 https://baijiahao.baidu.com/s?id=1605870136961096251&wfr=spider&for=pc . 원래의 템플릿은 합산 범위 세그먼트 현재 최소 간격이다.
1 #INCLUDE <iostream> 2 #INCLUDE <STDIO.H> 3 #INCLUDE <math.h> 4 #INCLUDE <알고리즘> 5 #INCLUDE < 문자열 .H> 6 #DEFINE 줄게 긴 긴 7 8 CONST의 INT MAXN = 1,000,001 ; 9 10 이용한 스페이스 성병; 11 12 LL의 N, M, A [MAXN, ANS [MAXN << 2 ] 태그 [MAXN << 2 ]; 13 14 LL의 LS (LL의 X) 15 { 16 리턴 X << 1 ; 17 } 18 19 LL 중계국 (LL의 X) 20 { 21 리턴 X << 1 | 1 ; 22 } 23 24 공극 push_up (LL 피) 25 { 26 ANS [P] = 분 (ANS [LS (p)], ANS [RS (p)]); 27 } 28 29 공극 빌드 (LL의 P, LL의 L, LL의 등록 상표) 30 { 31 태그 [P] = 0 ; 32 경우 (L == R) 33 { 34 ANS [P]가 = A [L]을; 35 반환; 36 } 37 LL 중간 = (L +의 연구) >> 1 ; 38 빌드 (LS (P), 리터, 미드); 39 빌드 (RS (p), 미드 + 1 , R); 40 push_up (p); 41 } 42 43 공극 F (LL의 P, LL의 L, LL R, K의 LL) 44 { 45 태그 [P] = 태그 [P] + K; 46 ANS [P] = ans에 [P] + k 값 * (R - L + 1 ); 47 } 48 49 공극 push_down (LL의 P, LL의 L, LL의 등록 상표) 50 { 51 LL 중간 = (L + R) >> 1 ; 52 ℉ (LS (p), (L), 중간 태그 [P]); 53 F (RS (p), 미드 + 1 , R 태그 [P]); 54 [P]가 태그 = 0 ; 55 } 56 57 LL 쿼리 (LL의 q_x, LL q_y, LL의 L, LL R, P는 LL) 58 { 59 LL 입술 = 922,337,203,685,477,580 ; 60 의 경우 (q_x <= 1 && R <= q_y) 61 { 62 반환 ANS [P]; 63 } 64 LL 중간 = (L +의 연구) >> 1 ; 65 push_down (P, L, R); 66 의 경우 (q_x <= MID) 67 { 68 입술 = 분 (입술, 쿼리 (q_x, q_y, L, 중간, LS (p))); (69) } (70) 의 경우 (q_y> MID) 71 { 72 입술 = 분 (입술, 쿼리 (q_x, q_y 중간 + 1 , R, RS (p))); 73 } 74 리턴 입술; 75 } 76 77 INT 주 () 78 { 79 LL의 E, F; 80 는 scanf ( " %의 LLD의 %의 LLD " , N, m); 81 대 (LL 난 = 1 ; 나는 <= N; ++ i가 ) 82 { 83 는 scanf ( " %의 LLD " , & A [I]); 84 } 85 빌드 ( 1 , 1 , N); 86 대 (LL I = 1 ; i가 <= m; 내가 ++ ) 87 { 88 는 scanf ( " %의 LLD의 %의 LLD " , E, F); 89 의 printf ( " %의 LLD ' , F 질의 (즉, 1 N, 1 )); 90 } 91 반환 0 ; (92) }