Member 11775723 Ответов: 0

Найти длину самой длинной подстроки со всеми 1 в двоичной строке с k запросами


Учитывая строку размера n, состоящую из 0s и/или 1s, вы должны выполнить k запросов, и возможны два типа запросов.

"1"(без кавычек): выведите длину самой длинной подстроки со всеми "1".
"2 X"(без кавычек): где X-целое число от 1 до n.В этом запросе вы будете
измените символ в X-й позиции на '1' (возможно, что символ в I-й позиции
позиция была уже "1")

входной формат:
* Первая строка входных данных содержит n и k, где n-длина строки, А k - количество запросов.
* Следующая строка содержит строку из 0 и/или 1 длины n.
* Каждая из следующих k строк содержит запрос любого типа (например, 1 или 2).

выходной формат:
Для каждого запроса типа 1 выведите в новой строке максимальный размер подмассива со всеми 1.



Example Input:                        Example Output:
     5 7                                   0
     00000                                 1
     1                                     1
     2 3                                   3
     1                                     
     2 5
     1
     2 4
     1


Что я уже пробовал:

Мое решение: O(k*n) (если большинство запросов типа 1):

if(type==1){
        int count=0, ans=0;
        for(int i=0;i<str.size();i++){  //longest len substring
            if(str[i]=='1'){
                count++;
            }else{
               ans=max(ans,count);
               count=0;
            }
        }

        printf("%d\n",ans);
 }else{
        int xth;
        scanf("%d",&xth);
        str[xth-1]='1';   //update
 }



Я не могу найти эффективного решения, так как для запроса типа 1 единственное решение, которое я мог бы придумать, - это перебирать строку каждый раз и поддерживать переменную "count" со всеми 1 последовательно и, наконец, обновлять переменную "ans", когда ith str становится "0".

Я подумываю об использовании дерева сегментов, но не знаю, как это сделать. По мере необходимости хорошим решением должно быть O(k*log(n)) (выполнение запроса "type1" в log(n) времени)

PIEBALDconsult

Определите и реализуйте структуру данных, которая будет поддерживать необходимую вам информацию.
Я бы представил себе форму таблицы поиска-индексированную по символу (0,1) - карт, содержащих начальный индекс и длину.

0 Ответов