Качественный отдых

면접 대비

시간 제한1초메모리 제한2048 MB

요약
0과 1로 주어진 근무/휴무 일정에서 추가 휴무 일수를 받았을 때, 길이 2 이상인 연속 휴무 구간에 속하는 휴무 일수의 최댓값을 각 질의마다 구한다.
난이도

보통10점 중 7점

유형
그리디, 이분 탐색, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

Прохор проходит стажировку продолжительностью nn календарных дней в ИТ-компании. Прохор стажируется в службе поддержки, поэтому у него сложный график рабочих и выходных дней на время стажировки.

Кроме выходных, у Прохора есть некоторое количество отгулов --- дополнительных выходных дней, которые он может взять в любые рабочие дни.

За один выходной день Прохор качественно отдохнуть не сможет, поэтому он считает днями качественного отдыха только те выходные дни, которые входят в последовательность из идущих подряд двух или более выходных дней.

Вам даны qq запросов --- различных значений количества отгулов, которые может взять Прохор. Ваша задача --- по заданному графику рабочих и выходных дней стажировки определить для каждого запроса, какое максимальное количество дней качественного отдыха за время стажировки может получить Прохор.

입력

Первая строка входных данных содержит два целых числа nn и qq (1≤n≤100,0001 \le n \le 100\\,000, 1≤q≤n+11 \le q \le n+1).

Следующая строка содержит строку ss длины nn, состоящую из символов <<0>> и <<1>> --- график стажировки. В этой строке символом <<0>> обозначается рабочий день, а символом <<1>> --- выходной.

В следующих qq строках находятся qq целых чисел k_ik\_i (0≤k_i≤n0 \leq k\_i \leq n) --- количество отгулов в ii-м запросе. Гарантируется, что каждое значение k_ik\_i не превосходит количества рабочих дней в графике стажировки.

출력

Выведите qq целых чисел --- для каждого значения k_ik\_i определите наибольшее количество качественных дней отдыха, которое может получить Прохор за время стажировки, выбрав k_ik\_i дополнительных выходных дней.

힌트

В первом примере все три дня стажировки являются рабочими. Если взять менее двух отгулов, дней качественного отдыха получить невозможно. Для k_3=2k\_3=2 или k_4=3k\_4=3 можно выбрать отгулами первые k_jk\_j дней стажировки, и все они будут днями качественного отдыха.

Во втором примере один отгул выгодно взять во второй день стажировки, тогда первые три дня стажировки будут днями качественного отдыха.

예제3

  1. 예제 1

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

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

    입력
    11 6
    11010101001
    5
    2
    0
    1
    4
    3
    
    예상 출력
    11
    7
    2
    5
    10
    9