[역 사고 +의 연결되지 않은 세트] Codeforces 라운드 722 파괴 배열

파괴 배열

테스트 당 시간 제한
1 초
시험 당 메모리 제한
256메가바이트
입력
표준 입력
산출
표준 출력

넌 이루어진 배열 주어진 N 음이 아닌 정수 1 ,  2 , ...,  N을 .

당신은 하나를 사용하여 배열을 하나의 정수를 파괴하는 것입니다. 따라서, 당신은 정수의 순열 주어진다 1 N 배열 순서 소자 파괴 정의.

각 소자는 파괴 후에는 전혀 파괴 요소와 요소의 합은 가능한 최대 값을 포함하지 않도록, 배열의 부분을 알 수있다. 빈 세그먼트 내의 요소의 합으로 간주된다 0.

입력

입력의 첫 번째 라인은 하나의 정수 포함 N ( 1 ≤  N  어레이의 길이 - 100 ≤ 000 참조).

두 번째 행은 포함 된 n 개의 정수 1 ,  a는 2 , ...,  N ( ≤ 0  A가 나는  10 ≤ 9 ).

세 번째 줄의 정수의 순열 포함 1 N  소자를 파괴하는 데 사용 된 순서 -.

산출

인쇄 n 개의 라인. 나는 제 이후에는 파괴 요소를 포함하지 않는 부분에 요소의 최대 가능 합 - 번째 행은 하나의 정수를 포함한다 동작이 수행된다.

입력
4 
1 3 2 5
3 4 1 2
산출
5 
4
3
0
입력
5 
1 2 3 4 5
4 5 1 2 3
산출
6 
5
5
1
0
입력
8 
5 5 4 4 6 6 5 5
5 7 8 1 2 3 4 6
산출
18 
16
11
8
8
6
6
0
노트

첫 번째 샘플을 고려 :

  1. 세 번째 요소는 파괴된다. 배열은 지금 최대 합 1-3 * 5 세그먼트 (5)는 하나 개의 정수로 구성 5.
  2. 네 번째 요소는 파괴된다. 배열은 지금 1 3 *. * 최대 합 세그먼트 4 개의 정수로 구성 1-3.
  3. 첫 번째 요소는 파괴된다. 배열은 지금  * 3 *. * 최대 합 세그먼트 3은 하나의 정수로 구성 3.
  4. 마지막 요소는 파괴된다. 이때가이 배열에 남아 유효한 비공 세그먼트이다 없으므로 답 같다 0.

질문의 의미 : n은 음이 아닌 정수의 배열을 제공하고, 순서를 제공가 제거되도록, 각 연속 최대 간격을 필요로하고 얼마나 많은되는
아이디어 : 시뮬레이션 정말 질문에 TLE를 착수하도록 구성 , 샘플을 살펴 찾을 경우이 순서가 연속 계산 될 수 있으며, 가장 많은 수이며, 확인하고 연속 간격 유지하도록 설정할 수 있습니다 가입 쉽기 때문에 삭제 된 시퀀스를
삭제 순서에 따라, 그리고 지금 우리 순서에 합류 고려, 그 반대 순서 읽고
마지막에는 추가 요소, 그것은 0, 표현하는 원래의 삭제 순서가 모두 완료 삭제할
요소를 추가하여 표시
현재 요소의 아버지를 찾기 위해
이 요소의 오른쪽이 너무 추가되는 경우, 볼 수를 그 다음이 컬렉션은 현재 가입하고 확인하도록 설정되어 지속적으로 수집, 소속
업데이트 아이 (현재 요소의 아버지) 아버지, 아버지 업데이트 연속체와
이 요소는 같은 이유로, 너무 왼쪽으로 추가되는 경우
마지막 해체 설정된 속하는이 요소를 체크 아웃
답변에 답변을 지금 비교하고 현재의 응답으로 가장 큰 선거 중 하나를 설정을 확인

(... 분리 된 세트 템플릿이 너무 복잡의 기억을 좋아하지 않는이 제목을 작성 발견)

1 #INCLUDE <. 비트 / stdc ++ H>
 2  사용  스페이스 성병;
3 타입 정의  LL;
4  CONST의  INT의 AMN 1E5 + = 5 ;
5  INT N;
6  LL 합 [AMN 같이, [AMN] ans와;
7  BOOL [AMN] 사용;
8  INT의 전 [AMN], A [AMN], [AMN] 순서;
(9)  공극 초기화 () {
 10      memset 함수 (사용 0 , sizeof 연산자를 사용);
(11)      에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++) [I]가 = 내가 합 [I] = 사전 A [I];  /// 아버지 그 자신을 시작하고, 그들 스스로 연속체있는 
12이다  }
 13는  INT FD ( INT I) {
 14      반환 [I]가 = I는 == 미리 [I]를 I 사전을 :? FD (프리 [I]);
 15  }
 16  보이드 추가는 ( int로 FA, INT의 CD) {
 . 17      미리 [CD = FA를;              /// 업데이트 아버지 
(18) 인      [FA] + = SUM [CD] SUM        /// 업데이트 아버지 및 연속 
19.  }
 20된다  INT {() 본체
 (21)는      아이폰 OS :: sync_with_stdio ( 0 )
 (22)가      >> CIN N-,
 23는      A [0 ] = 0 ,
 24       ( INT I = 1. ; I <= N-; I ++ ) {
 25          CIN >> A [I]
 26은      }
 27       ( INT I = N-; I> = 1이다. ] 난 ... ) {
 28          CIN >> 순서 [I]가,           /// 삭제 서열 피사체가 현재 판독 역순, 첨가 순서를 고려 
29      }
 30      은 init ()를,
 31은      ANS [ 0 ] = 0 ;                    /// 마지막 아니오 추가 요소는 모두 표현하기 위해 0 인 원본 위에 삭제 삭제 
32      INT FA]
 (33)가      대해( 지능 I = 1. , I는 <N-; I는 ++ ) {
 34되는          중고 [주문 [I] = 1이다. ]        /// 마커 요소를 첨가 한 
35          INT OFA;                 /// 이제 아버지 소자 얻기 
36          IF (중고 [ 주문 [I] + . 1 ]) {    /// 이 요소가 연속적인 세트에 속해 있는지, 위에 오른쪽에 첨가되는 경우, 분리 된 세트의 현재의 세트는 추가 
37              OFA = FD (주문 [I]) ;
 38              FA = FD ([I]를 주문 + . 1 )
 (39)              , 추가 (FA, OFA)
 40          }
 41되는          경우 - ([주문 [I] 사용 . 1 {])    ///이 요소는 남아와 마찬가지로 첨가하면 
42은              OFA = FD (주문 [I]);
 (43)가              FA = FD (주문 [I] - 1이다. )
 (44)가              추가 (FA, OFA)
 (45)          }
 (46) 인          OFA FD가 = (주문 [I])        /// 소자에 마지막 모습 - 이산 세트에 속하는 
47          ANS를 [I]는 = 최대 (ANS [I- 1. ] SUM [OFA]);   /// 비교 않음 및 최대 전류 응답으로 선택된 현재 끊긴 설정된 않음 
48      }
 49       ( INT I = N- 1. , I가> = 0 ; 난 ... ) {
 50          의 printf ( " % LLD의 \의 N- " , ANS [ I]);
51      }
 52  }
 53  / * **
 54  당신에게 비 음수 정수 어레이에 N을 갖는, 그래서 그들은 삭제할 순서를 지정하고, 각각의 연속 구간의 요구가 최대 개수
 (55)  에 의해 시작된 아날로그 질문, 정말 TLE의 의미, 그리고 순서가 연속 계산 될 수 있으며, 가장 많은 조인하기 쉬운 것처럼 삭제 된 순서를 발견하고, 확인하고 연속체하고 유지하도록 설정할 수 있습니다
 (56)  , 삭제 순서로 주제를 우리는 지금, 순서에 합류 고려 역 읽기 순서 그래서
 57 개  모두 삭제를 통해 표현하는 원래의 삭제 순서 때문에 0으로 지속되지 합류 요소
 (58)  태그 요소를 통해 추가되는
 59  이제 요소의 아버지 찾기
 (60)  이 요소의 오른쪽 인 경우 그 다음이 컬렉션은 현재 해체-설정 추가되어 연속 컬렉션에 속한 것을보고도 추가
 (61)  (현재 요소의 아버지) 아버지, 아이를 업데이트하고 그의 아버지 업데이트 연속성 및
 (62)  이 요소가 왼쪽에 추가 된 경우 도, 그리고 같은 토큰
 (63)  이 요소의 마지막 모습 - 분리 된 설정 속하는
 64  답에 답 이제이 상대적으로 분리 된 세트를, 그리고에 대한 답으로 최대를 선택 현재
 65  ** * /

 

추천

출처www.cnblogs.com/brainm/p/11329356.html