#P12898. [POI 2019/2020 R2] 牢骚 Marudny Bajtazar

[POI 2019/2020 R2] 牢骚 Marudny Bajtazar

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXVII Olimpiada Informatyczna – II etap Marudny Bajtazar

圣诞节即将来临,Bajtazar 决定购买新的装饰品来装点自己的家。今年,他想尝试极简风格,计划买一条只有绿色和红色两种颜色的灯链。于是,他前往附近的灯饰店,请店主展示双色灯链。

然而,多年在字节王国从事各种工作的经历,让 Bajtazar 养成了对任何事物(哪怕是最琐碎的)都有自己看法的习惯,而且他从不吝于表达意见(即便没人愿意听)。特别是在时尚和美学方面,他的观念尤为固执,这对那些接待过他的店主来说尤为头疼,因为他们总是要听他抱怨商品哪里不尽如人意。

这次也不例外:Bajtazar 盯着店主展示的灯链看了半天,终于开口说:「总体来说,这条灯链还不错,但整体美感被一个问题破坏了——链条里没有一段连续四个灯泡的片段,颜色依次是红-绿-绿-红。」由于店主没有其他灯链可供选择,他决定更换其中一个灯泡的颜色,以满足这个要求。

Bajtazar 满意地点了点头,但没过多久又说:「现在还差一段颜色为绿-红-绿-绿-红的片段。」店主又换了一个灯泡的颜色。Bajtazar 接着说:「现在看起来很美,但还缺少另一个对颜色搭配很重要的片段。」

虽然 Bajtazar 非常耐心地解释为什么灯链还不完美,但他担心店主更换灯泡颜色的方式过于随意,可能无法快速达到目标。为了更高效地解决问题,他请你帮忙编写一个程序,帮助他快速找到灯链中缺失的、影响他美感的片段。作为第一步,请你为他编写一个程序,计算给定灯链中未出现的最短颜色片段的长度。

输入格式

输入的第一行包含两个整数 nnmm (1n100000,0m10000)(1 \leq n \leq 100000, 0 \leq m \leq 10000),用单个空格分隔,分别表示灯链中灯泡的数量和店主更换颜色的次数。第二行包含一个长度为 nn 的字符串,由字符 01 组成,表示灯链中各灯泡的颜色(例如 0 表示红色,1 表示绿色)。

接下来的 mm 行描述颜色更换操作,每行包含一个整数 aia_{i} (1ain)(1 \leq a_{i} \leq n),表示店主更换了第 aia_{i} 个灯泡的颜色。

输出格式

输出应包含正好 m+1m+1 行,每行包含一个整数。第 ii 行表示在店主完成前 i1i-1 次更换后,灯链颜色编码字符串中未出现的最短子字符串(由 01 组成)的长度。

6 2
001010
6
2
2
3
2

提示

样例 1 解释

在字符串 001010 中,未出现的最短子字符串是 11,长度为 22。更换第六个字符后得到 001011,此时长度为 1122 的所有子字符串都已出现,但长度为 33 的子字符串 110 未出现。更换第二个字符后得到 011011,此时未出现的最短子字符串是 00,长度为 22

附加样例

  1. 该样例满足 n=5,m=0n=5, m=0,灯链为 10000
  2. 该样例满足 n=500,m=2n=500, m=2,初始灯链为 000...0(全为 0),更换第一个和最后一个灯泡;
  3. 该样例满足 n=m=10000n=m=10000,初始灯链为 1000...0(开头为 1,后面全为 0),依次更换所有灯泡。

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 n,m1000n, m \leq 1000 4646
22 无附加限制 5454