제출 #869783

#제출 시각아이디문제언어결과실행 시간메모리
869783serifefedartarFurniture (JOI20_furniture)C++17
100 / 100
180 ms16632 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9+9;
const ll LOGN = 30; 
const ll MAXN = 1100;

int path[MAXN][MAXN]; 
int cnt[2*MAXN], N, M;
void deactivate(int row, int col) {
	path[row][col] = 0;
	cnt[row+col]--; 

	if (row - 1 >= 1 && path[row-1][col] && path[row-1][col+1] == 0)
		deactivate(row-1, col);
	if (col - 1 >= 1 && path[row][col-1] && path[row+1][col-1] == 0)
		deactivate(row, col-1);
	if (row + 1 <= N && path[row+1][col] && path[row+1][col-1] == 0)
		deactivate(row+1, col);
	if (col + 1 <= M && path[row][col+1] && path[row-1][col+1] == 0)
		deactivate(row, col+1);
}

bool add(int row, int col) {
	if (cnt[row+col] == 1 && path[row][col])
		return false;
	if (path[row][col] == 0)
		return true; 
	deactivate(row, col);
	return true;
}

int main() {
	fast
	cin >> N >> M;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++)
			path[i][j] = true;
	}

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++)
			cnt[i+j]++;
	}

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			int x; cin >> x;
			if (x)
				add(i, j);
		}
	}

	int Q;
	cin >> Q;
	while (Q--) {
		int row, col;
		cin >> row >> col;
		if (add(row, col))
			cout << "1\n";
		else
			cout << "0\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...