2020 지방 선거 시뮬레이션 라운드 # 8 솔루션 (20/02/07)

[링크] 게임 http://59.61.75.5:8018/contest/218

그리고 A.

[제목] 이탈리아

트리 $ $ A N- 포인트가 보유 $ N-1 $ 에지 각각 $ (u_1, v_1) (u_2, v_2) \ cdots (U_ {N-1}, V_ {N-1} ) $를 처음 U $ $ 각 지점에 대해,이 설정 $ S_u = \ {U \} $.

이 $ m $ 작업, $ I $ $ 주어진 $ P_i의의 조작 $ S_ {U_ {p_i}} $ 및 $ S_ {V_ {p_i}} 그들과 할당 $.

I \ 모두 $ 모든 작업 종료 후, [1, N] $는 $ I $ 요청 집합의 개수를 포함한다.

데이터 범위 [] $ N, m \ 르 5 \ 시간 10 ^ 5 $한다.

[설명]

이 계산 될 때 각 점을 고려하십시오. 물론, 각 블록에있어서, 그 통신의 동작에 영향을 미친다. 역순 처리의 동작, 클릭 통계.

효율성의 $ O (m + n)은 $. 기대 점수 : 100.

[코드]

1 #INCLUDE <. 비트 / stdc ++ H>
 2  INT N, m, u는 [ 500,010은 , V는 [ 500,010은 , [S 500,010을 , 브로 [ 500,010 ], Q [ 500,010 ];
3  ) (주 체결
 4-  {
 5      는 scanf를 ( " % D % D " , 및 N, m);
6       ( INT 나 = 1 ; i가 <N; I ++)는 scanf는 ( " % D % D ' , U [I], V [I]);
7       ( INT 난 = 1 ; 나는 <= N; 나는 ++) S [I] = 1 ;
8     위한 ( INT 난 = 1 는 scanf (; I <= m I ++) " 가 % d " , Q [I])를;
9       ( INT (X) = Q [I] s가 [U [X] = S [V [X] = S [U [X] + S [V], 난 - I I = m, X) [X] - 브로 [X], 발 [X] = S [U [X];
10       ( INT 나 = 1 ; i가 <= N; I ++)의 printf ( " % D % C " s가 [I], " \ n " [I == N]);
11      반환  0 ;
12 }
DTOJ4710

C. 관리

[제목] 이탈리아

기사 $ $ N 번째 행은 제 문서 정확히 $ K $의 비어 있지 않은 부분으로, 구분 I에게 $ A_I의 $ $ 오른쪽 값 $ 동일한 세그먼트 A_I $ $ $ 동일한 튜플 (I 그래서 , j)를 가능한 한 적게는 $. 즉,이 값 $ $ $ I $ J 문서의 오른쪽 부분에서 가정은 $ C (I, J) $ 일이있다 최소화주세요 $ \ 합계 \ limits_ ^ K \ 합계 \ limits_ {{난 = 1} J} \하기 Binom {C (I, J)} {2} $.

数据 范围】 【$ 2 \ n \ 10 ^ 5 \ 1 \ 및 K \와 \ 분 \ {N, 20 \} \ 1 \ 및 A_I \ n $.

[설명]

$ DP의 $를 생각해 보자. $ 제공자의 F는 [I] [J] $ $ I $ 전면을 나타내는 세그먼트 $ K $의 최소 개수로 나누어진다. 있다 : $의 F [I] [J] = \ 분 \ limits_ {0 \ 당량 K <I} (F [K] [J-1] + W (K + 1, I))은 $.

$ K $ 작은 사람 $ K $ 위해, 즉 $ J $으로 각 층의 전사, 슬라이싱을 알 수있을 것이다.

플레이 테이블은 의사 결정 단조을 발견. 우리는 분열과 정복의 단조 로움과 의사 결정 과정을 고려, 포인터 또는 단조로운 큐와 특정 상황을 유지할 수 없습니다.

(L, R) $ 승 $을 계산하는 방법을 고려한다. (L-1, R) $ 위치 등에 승 $ 푸시 승 $ (L, R) $으로부터 명백해질 것이다. 따라서, 유사한 MO 팀 접근 방식을 유지합니다.

효율 O (NK \ 로그 n)이 $ $. 기대 점수 : 100.

1 #INCLUDE <비트 / stdc ++ H.>
 2  CONST    INF = 1LL << 60 ;
3  INT N, K, CNT [ 100010 ]이 [ 100010 ], PL, PR;
4   길이 를 f [ 100010 ] [ 22 ] 입술;
5 인라인 무효 인 ( INT의 X, INT V) {RES- = 1LL * CNT [X] * (CNT [X] - 1 ) / 2 ; CNT [X] + = V] 입술 + = 1LL * CNT [X] * (CNT [X] - 1 ) / 2 ; }
 6 인라인 공극 (해결 INT의 L,INT의 R, INT L, INT R, INT의 K)
 7  {
 8      INT 중간 = (L + R) >> 1 ;
9 일      동안 (PL> L + 1 ) 인 (a [- PL, 1 );
10      동안 (PR <MID) 인 (a [++ PR, 1 );
11 일      동안 (PL <L + 1 ) 인 (a [PL ++] - 1 );
12      동안 (PR> MID) 인 (a [PR -] - 1 );
13      INT p = L;   ANS = [L] F [K- 1 ] + 입술;
14 일      동안 (PL <= 중간 및 PL <= R + 1 )
 15      {
 16          의 경우 (F [pl- 1 ] [K- 1 ] + 입술 <= ANS) ANS = F [pl- 1 ] [K- 1 ] + 입술, p = pl- 1 ;
17          인 (a [PL ++] - 1 );
18      }
 19      F [미드] [K] = ANS;
20      의 경우 (L <= 미드 1 (L, 중간 해결) 1 , L, P, K);
21 일      경우 (MID + 1 <= R) - (+ 중간 해결 1 , R, P, R, k)를;
22  }
 23 서명의 main ()
 24  {
 25      는 scanf ( " % D % D " , 및 N, K);
26       ( INT 나 = 1 ; i가 <= N; I ++)는 scanf ( " %의 D " , & A [I]);
27       ( INT 난 = 0 ; i가 <= N; I ++)  ( INT J = 0 ; J <= K, J ++)를 F [I] [J] = INF;
28      F [ 0 ] [ 0 ] = 0 ;
29       ( INT J = 1; J <= K, J ++ )
 30      {
 31          입술 = 0 ; PL = 1 ; PR = N;
32           ( INT 나 = 1 ; i가 <= N; I ++) CNT [I] = 0 ;
33           ( INT 나 = 1 ; I <= N; I ++) 인 (A [i]는, 1 );
34          (해결 1 , n은 0 , N- 1 , J);
35      }
 36      리턴 의 printf (! " %의 LLD \ n " , F [N] [K]);
37 }
DTOJ4718

추천

출처www.cnblogs.com/RenSheYu/p/12272749.html