화물의 종류 (차등)

 

링크 : 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 }

 

 

 

 

 

-

추천

출처www.cnblogs.com/jiamian/p/12556532.html