아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

캐시 메모리 정하기

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

요약
배열 A에서 연속한 부분 배열을 골라 캐시로 옮길 때, 고른 길이에 대한 비용과 N개 저장 공간의 총 사용 비용을 더한 값을 최소로 만든다.
난이도

보통10점 중 6점

유형
누적 합, 슬라이딩 윈도우, 투 포인터
정답자
아직 제출이 없습니다

문제

컴퓨터의 정보 처리 시간을 줄이는 것은 중요하다. 처리 시간을 줄이는 방법에는 여러 가지가 있는데, 그 중 캐시 메모리(Cache Memory)에 대해서 알아보자.

캐시 메모리는 메인 메모리에 비해서 정보의 접근 속도가 빠르지만, 메인 메모리에 비해서 용량이 적다는 단점이 있다. 따라서 메인 메모리에 있는 데이터를 캐시 메모리에 옮겨두고, 데이터를 캐시 메모리에서 찾게 하면 처리 속도를 줄일 수 있다.

보통 캐시 메모리는 지역성이라는 원리를 사용하지만, 이 문제에서는 여러분이 직접 캐시 메모리에 옮길 데이터를 정해야 한다.

NN개의 저장 공간으로 이루어진 메인 메모리가 있다. 각 저장 공간에는 11 이상 NN 이하의 고유한 번호가 연속해서 붙어 있다.

길이 NN의 메모리 사용 요청 배열 B=\[B_1,B_2,⋯ ,B_N]B=\[B\_1, B\_2, \cdots, B\_N]이 주어진다. 이는 ii번 저장 공간이 총 B_iB\_i번 사용됨을 의미한다.

저장 공간이 사용되기 전, 당신은 캐시 메모리에 옮길 영역을 정할 수 있다. 그 방법은 다음과 같다.

  • 캐시 메모리를 저장하기 위한 길이 MM인 배열 A=\[A_1,A_2,⋯ ,A_M]A=\[A\_1, A\_2, \cdots, A\_M]이 주어진다. 배열 AA의 각 원소는 11 이상 NN 이하의 정수이다.
  • 이 배열 AA에서 연속한 부분 배열을 골라 부분구간에 포함되는 번호를 가진 저장 공간을 전부 캐시 메모리에 옮긴다. 이때 부분 배열로 빈 배열을 선택할 수도 있다.
  • 이때 고른 부분 배열의 원소 하나당 KK의 시간이 소요된다. 같은 원소가 여러 개 있더라도 그 개수만큼 중복하여 갯수를 센다.

캐시 메모리에 옮길 영역이 결정되면 저장 공간을 사용하기 시작한다. 각 저장 공간을 사용할 때 걸리는 시간은 다음과 같다.

  • 저장 공간이 캐시 메모리에 옮겨졌다면, 사용에 걸리는 시간은 XX이다.
  • 그렇지 않은 경우 사용에 걸리는 시간은 YY이다.

이때 항상 X<YX < Y임이 보장된다.

여러분의 목표는 캐시 메모리에 옮길 저장 공간을 잘 정하여 마지막 메모리 사용이 끝날 때까지 걸린 시간을 최소화하는 것이다.

입력

첫 번째 줄에 양의 정수 NN, MM, KK, XX, YY가 공백으로 구분되어 주어진다. (1≤N,M≤200,000;(1 \le N, M \le 200\\,000; 1≤K,X,Y≤1,000,000;1 \le K, X, Y \le 1\\,000\\,000; X<Y)X < Y)

두 번째 줄에 배열 A_1,A_2,⋯ ,A_MA\_1, A\_2, \cdots, A\_M이 공백으로 구분되어 주어진다. (1≤A_i≤N)(1 \le A\_i \le N)

세 번째 줄에 배열 B_1,B_2,⋯ ,B_NB\_1, B\_2, \cdots, B\_N이 공백으로 구분되어 주어진다. (0≤B_i≤1,000,000)(0 \le B\_i \le 1\\,000\\,000)

출력

마지막 메모리 사용이 끝날 때까지 걸린 시간의 최솟값을 출력한다.

예제3

  1. 예제 1

    입력
    5 5 5 1 10
    1 2 3 4 5
    1 2 2 1 0
    
    예상 출력
    26
    
  2. 예제 2

    입력
    3 7 3 2 6
    3 1 1 3 2 3 2
    2 2 2
    
    예상 출력
    21
    
  3. 예제 3

    입력
    3 3 5 1 2
    3 3 3
    1 1 0
    
    예상 출력
    4