Submission #1309443

#TimeUsernameProblemLanguageResultExecution timeMemory
1309443VMaksimoski008Furniture (JOI20_furniture)C++20
100 / 100
1165 ms18232 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;

int n, m, q, a[N][N], good[N][N], cnt[2*N], in[N][N], out[N][N];

void add(int r, int c) {
    if(a[r][c]) return ;
    a[r][c] = 1;
    cnt[r+c]--;
    good[r][c] = 0;

    if(r > 1 && --out[r-1][c] == 0) add(r-1, c);
    if(c > 1 && --out[r][c-1] == 0) add(r, c-1);
    if(r < n && --in[r+1][c] == 0) add(r+1, c);
    if(c < m && --in[r][c+1] == 0) add(r, c+1); 
}

signed main() {
    cin >> n >> m;  
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cnt[i+j]++;
            good[i][j] = 1;
            in[i][j] = (i > 1) + (j > 1);
            out[i][j] = (i < n) + (j < m);
        }
    }

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

    cin >> q;
    while(q--) {
        int r, c;
        cin >> r >> c;
        
        cout << (!good[r][c] || cnt[r+c] > 1) << '\n';
        if(!good[r][c] || cnt[r+c] > 1) add(r, c);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...