LIS 하나 빼기

시간 제한3초메모리 제한1024 MB

요약
각 원소를 하나씩 제거했을 때 남은 배열에서 가장 긴 증가 부분 수열의 가중치 합 최댓값을 모든 원소에 대해 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 세그먼트 트리, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

길이 NN인 정수 배열 A=\[A_1,A_2,⋯ ,A_N]A=\[A\_1, A\_2, \cdots, A\_N]이 주어진다. 배열의 각 원소 A_iA\_i에는 가중치 V_iV\_i가 대응된다. 이 때 모든 원소 A_iA\_i는 서로 다른 정수이다.

이때, 배열 AA의 부분 증가 수열 중 길이가 최대인 수열을 LIS라 하자. 부분 증가 수열이란, 배열에서 00개 이상의 원소를 제거하여 얻을 수 있는 증가 수열을 의미한다.

또한, 어떤 부분 수열을 구성하는 원소들의 가중치 합을 그 부분 수열의 가치라 정의한다.

각 1≤i≤N1 \leq i \leq N에 대해, AA에서 원소 A_iA\_i를 제거한 배열 A_1,⋯ ,A_i−1,A_i+1,⋯ ,A_NA\_1, \cdots, A\_{i-1}, A\_{i+1}, \cdots, A\_N 에서 얻을 수 있는 LIS의 최대 가치를 구하여라.

입력

첫째 줄에 NN이 주어진다. (2≤N≤300 0002 \leq N \leq 300\ 000)

둘째 줄에 NN개의 양의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2,\cdots, A\_N이 공백으로 구분되어 주어진다. i≠ji\ne j일 때 A_i≠A_jA\_i\ne A\_j를 만족한다. (1≤A_i≤1091 \leq A\_i \leq {10}^9)

셋째 줄에 NN개의 양의 정수 V_1,V_2,⋯ ,V_NV\_1, V\_2,\cdots, V\_N이 공백으로 구분되어 주어진다. (1≤V_i≤1091 \leq V\_i \leq {10}^9)

출력

첫째 줄에 NN개의 정수를 공백으로 구분하여 출력한다. ii번째 수는 AA에서 원소 A_iA\_i를 제거했을 때 얻을 수 있는 LIS의 최대 가치를 뜻한다.

예제2

  1. 예제 1

    입력
    4
    2 1 3 4
    1 2 4 8
    
    예상 출력
    14 13 10 6
    
  2. 예제 2

    입력
    5
    1 4 2 3 5
    1 100 1 1 1
    
    예상 출력
    3 4 102 102 3