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

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

블록

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

요약
각 k마다, k보다 높은 더미의 맨 위 블록을 이웃으로만 옮겨서 높이가 k 이상인 연속한 더미 구간의 최대 길이를 구한다.
난이도

보통10점 중 7점

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

문제

바이티는 생일 선물로 나무 블록 한 세트를 받았다. 블록은 모두 크기가 같은 단위 정육면체여서 서로 구별할 수 없다. 바이티는 블록을 위로 쌓아 더미를 만들고, 이 더미들을 한 줄로 나란히 세워 놓는다. 더미의 높이는 서로 다를 수 있다.

바이티의 아버지 바이테아사르는 다음과 같은 퍼즐을 낸다. 정수 kk를 하나 정한 뒤, 높이가 kk 이상인 더미가 연속으로 최대한 많이 이어지도록 블록을 재배치하라는 것이다.

단, 블록은 다음 규칙으로만 옮길 수 있다. 현재 높이가 kk보다 엄격하게 큰 더미에서 맨 위 블록 하나를 집어, 바로 양옆에 있는 더미 중 하나의 맨 위에 올려놓는다. 새로운 더미를 만들 수는 없고, 이미 있는 더미들 사이에서만 블록을 옮길 수 있다.

더미는 모두 nn개이고, ii번째 더미의 처음 높이는 xix_i이다. 바이테아사르는 서로 독립적인 질문을 mm개 던진다. 각 kk 값에 대해, 허용된 이동으로 얻을 수 있는 '높이가 kk 이상인 연속한 더미'의 최대 개수를 구하라. 모든 질문은 처음 배치에서 새로 시작한다.

입력

첫째 줄에 두 정수 nn과 mm이 주어진다 (1≤n≤1061 \le n \le 10^6, 1≤m≤501 \le m \le 50). 각각 더미의 개수와 바이테아사르의 질문 개수이다. 더미는 11번부터 nn번까지 번호가 매겨져 있다.

둘째 줄에 nn개의 정수 x1,x2,…,xnx_1, x_2, \dots, x_n이 주어진다 (1≤xi≤1091 \le x_i \le 10^9). xix_i는 ii번째 더미의 높이이다.

셋째 줄에 mm개의 정수 k1,k2,…,kmk_1, k_2, \dots, k_m이 주어진다 (1≤kj≤1091 \le k_j \le 10^9). 답을 구해야 하는 매개변수 kk의 값들이다.

출력

mm개의 정수를 공백 하나로 구분하여 출력한다. jj번째 정수는 매개변수 kjk_j에 대한 답, 즉 처음 배치에서 허용된 이동으로 얻을 수 있는 '높이가 kjk_j 이상인 연속한 더미'의 최대 개수이다.

힌트

예제3

  1. 예제 1

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

    입력
    1 3
    5
    1 5 6
    
    예상 출력
    1 1 0
    
  3. 예제 3

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