思路
由于只有两列,所以一个点会变成障碍的条件是他旁边的三个点都无法通行。
比如假设((1,2))变成岩浆:
如果((1,1))是岩浆,无法通行;
如果((1,2))是岩浆,无法通行;
如果((1,3))是岩浆,无法通行;
记录障碍物的个数,如果为(0)的话可以通行。
每次通过给定点周围的状态更新障碍物的个数。
代码:
const int maxn=1e5+10;
int a[3][maxn];
int main()
{
int n=read,q=read,res=0;
while(q--){
int x=read,y=read;
a[x][y]=!a[x][y];
if(x==1){
if(a[x][y]){
if(a[2][y-1]) res++;
if(a[2][y]) res++;
if(a[2][y+1]) res++;
}
else{
if(a[2][y-1]) res--;
if(a[2][y]) res--;
if(a[2][y+1]) res--;
}
}
else{
if(a[x][y]){
if(a[1][y-1]) res++;
if(a[1][y]) res++;
if(a[1][y+1]) res++;
}
else{
if(a[1][y-1]) res--;
if(a[1][y]) res--;
if(a[1][y+1]) res--;
}
}
if(!res) puts("Yes");
else puts("No");
}
return 0;
}
/*
**/