링크 : https://ac.nowcoder.com/acm/contest/4462/H
출처 : 네트워크 가축 오프
제목 설명
1에서 n으로 번호가 n 개의 창고와 비즈니스 플랫폼.
때 특정 상품의 구매,화물 사업은 여러 인접한 창고의 수에 분산됩니다.
당신이 숫자가 얼마 제품의 창고 보관의 모든 상품 구매가 완료되면 대부분의 유형 알고있는 경우에 우리는 판매 할 생각하지 않는다?
설명을 입력합니다 :
두 개의 양의 정수는 제 1 열에서 주어진다
, N-, m ≦ N m≤10 1 . 5 번, 창고의 재고 수를 나타낸다.
세 개의 양의 정수를 m의 다음 라인
L, R & LT, D, 1 ≦ L, r≤n, 1≤d≤10 . 9 . L과 R 간의 창고 번호 매기기 ㄹ 제품의 수에 포함된다.
출력 설명 :
하나 이상의웨어 하우스 조건, 최소 번호의 출력을 충족하는 경우 라인에서 제품의 출력 유형, 창고 번호까지 저장됩니다.
기입
5 5 1 1 1 3 3 1 2 5 2 5 5 1 4 5 1
수출
삼
종류와 범위, 더 확실한 차이는, 세그먼트 트리 쓸 수 있습니다
1 #INCLUDE <비트 / stdc ++ H.> 2 타입 정의 긴 긴 LL; 3 CONST INT INF = 0x3f3f3f3f ; 4 CONST 두 EPS 1e- = 8 ; 5 CONST의 INT 개조 1E9 + = 7 ; 6 CONST INT maxn 1E5 + = 10 ; 7 이용한 스페이스 성병; 8 9 벡터 < INT > 세인트 [maxn, ED [maxn]; 10 지도 < INT , INT > MP; 11 (12) INT 주 () 13 { 14 #ifdef와의 DEBUG 15 개 freopen을 ( " 의 Sample.txt " , " R " , 표준 입력); 16 #endif 다음 17 18 INT N, m; 19 는 scanf ( " % D % D " , 및 N, m); 20 대 ( INT 나 = 1 ; i가 <= m; I ++ ) 21 { 22 INT의 L, R, D; 23 는 scanf ( " % D % D % D ' , L, R, 및디); 24 일 [L] .push_back (d); 25 ED [R + 1 ] .push_back (d); 26 } 27 INT의 ID; 28 INT MAX = 0 ; 29 의 INT NUM = 0 ; 30 대 ( INT 나 = 1 ; i가 <= N; I ++ ) 31 { 32 대 (자동 그것을 세인트 [I]) 33 { 34 의 경우 (MP [그] == 0 ) NUM ++ ; 35 MP [그] ++ ; (36) } 37 대 (자동 그것을 : ED [I]) 38 { 39 MP [그] - ; 40 의 경우 (MP [그] == 0 ) num-- ; (41) } (42) 의 경우 (MAX < NUM) 43 { 44 MAX = NUM; 45 이드 = I를; 46 } 47 } 48 의 printf ( " 가 % d \ n " , ID); 49 50 복귀 0 ; 51 }
또 다른 방법 :
1 #INCLUDE <비트 / stdc ++ H.> 2 타입 정의 긴 긴 LL; 3 CONST INT INF = 0x3f3f3f3f ; 4 CONST 두 EPS 1e- = 8 ; 5 CONST의 INT 개조 1E9 + = 7 ; 6 CONST INT maxn 1E5 + = 10 ; 7 이용한 스페이스 성병; 8 9 벡터 <쌍 < INT , INT >> VT [maxn]; 10 세트 < INT >성; 11 MULTISET < INT > SST; 12 (13) INT 주 () 14 { 15 #ifdef와의 DEBUG 16 개 freopen을 ( " 의 Sample.txt " , " R " , 표준 입력); 17 #endif 다음 18 19 INT N, m; 20 는 scanf ( " % D % D " , 및 N, m); 21 대 ( INT 나 = 1 ; i가 <= m; I ++ ) 22 { 23 INT의 L, R, D; 24 는 scanf ( " % D % D % D ' , L, R, D); 25 VT [L] .push_back ({ 1 , D}); 26 VT [R + 1 ] .push_back ({- 1 , D}); 27 } 28 INT의 ID; 29 INT MAX = 0 ; 30 대 ( INT 나 = 1 ; i가 <= N; I ++ ) 31 { 32 대 (자동 그것을 : VT [I]) 33 { 34 INT의 OP = it.first; 35 INTD = it.second; 36 의 경우 (OP == 1 ) 37 { 38 st.insert (d); 39 sst.insert (d); (40) } (41) 그 밖의 경우 (OP == - 1 ) 42 { 43 sst.erase (sst.find (d)); 44 의 경우 (sst.find (d) == sst.end ()) st.erase (d); 45 } 46 } (47) 의 경우 (MAX < st.size ()) 48 { 49 MAX =() st.size; 50 이드 = I를; 51 } 52 } 53 의 printf ( " 가 % d \ n " , ID); 54 55 복귀 0 ; 56 }
-