题目描述
汪酱是一个笨笨的电子宠物,他不太会走路,只会一直迈左腿走,但是小明现在可以指导汪酱走。给定一个长度为 n
的汪酱迈腿图 a
,初始每一位都为 L
,表示汪酱一直在迈左腿。小明可以给出 q
次迈腿修改指令 x
,若 ax
为 L
,则将 ax
修改成 R
,否则将 ax
修改成 L
。对于每一次输入指令,请你求出对应的当前汪酱迈步正确次数(对于一个只含字符 L,R
的字符串 s
,若其中不存在连续的 L
和 R
,则称 s
满足要求)。
输入输出格式
输入格式 第一行有两个整数,分别表示序列的长度 n
和修改操作的次数 q
。 接下来 q
行,每行一个整数,表示本次修改的位置 x
。 输出格式 对于每次修改操作,输出一行一个整数表示修改 a
中最长的满足要求的子串的长度。
输入输出样例1
输入
6 2
2
4
输出
3
5
解释 第一次修改第二次迈腿为 R
,则前三次走路为 LRL
,是正确的迈步方式。 第二次修改第四次迈腿为 R
,则整个序列为 LRLRLL
,前五次是正确的。
输入输出样例2
输入
6 5
4
1
1
2
6
输出
3
3
3
5
6
说明提示
1≤n,q≤2×105
1≤x≤n
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
string leg_movements(n, 'L');
int max_length = 1;
int current_length = 1;
for (int i = 0; i < q; ++i) {
int x;
cin >> x;
if (leg_movements[x - 1] == 'L')
leg_movements[x - 1] = 'R';
else
leg_movements[x - 1] = 'L';
current_length = 1;
for (int j = 1; j < n; ++j) {
if (leg_movements[j] != leg_movements[j - 1]) {
current_length++;
} else {
max_length = max(max_length, current_length);
current_length = 1;
}
}
max_length = max(max_length, current_length);
cout << max_length << endl;
}
return 0;
}