Submission

Status:

[PPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Chawin

Problemset: fireball

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-22 14:23:25

#include<bits/stdc++.h>
using namespace std;

vector<int> city(10001);

int main(){
    ios_base::sync_with_stdio(0), cin.tie(0);

    int n, m, q;
    cin >> n >> m >> q;

    vector<vector<int>> mp(n+1, vector<int> (m+1));
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> mp[i][j];
        }
    }

    vector<vector<int>> com(n+1, vector<int>(m+1, 0));
    vector<vector<bool>> visited(n+1, vector<bool> (m+1, false));

    queue<pair<int, int>> qu;

    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {-1, 1, 0, 0};

    int cnt = 0, cntCity = 0;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(mp[i][j] == 1 && !visited[i][j]){
                qu.push({i, j});

                // cout << i << " " << j << "\n";

                cnt++;

                while(!qu.empty()){
                    int r = qu.front().first;
                    int c = qu.front().second;
                    qu.pop();

                    if(visited[r][c]) continue;

                    visited[r][c] = true;
                    com[r][c] = cnt;
                    city[cnt]++;

                    for(int d = 0; d < 4; d++){
                        int nr = r + dx[d];
                        int nc = c + dy[d];

                        if(nr <= 0 || nc <= 0 || nr > n || nc > m) continue;
                        if(visited[nr][nc]) continue;
                        if(mp[nr][nc] == 0) continue;

                        qu.push({nr, nc});
                    }
                }

                cntCity += city[cnt];
            }
        }
    }

    // cout << "\n";
    // for(int i = 1; i <= n; i++){
    //     for(int j = 1; j <= m; j++){
    //         cout << com[i][j] << " ";
    //     }
    //     cout << "\n";
    // }

    vector<bool> destroy(cnt+1, false);
    while(q--){
        int x, y;
        cin >> x >> y;

        int root = com[x][y];
        if(root == 0) cout << cntCity << "\n";
        else if(destroy[root]) cout << cntCity << "\n";
        else{
            cntCity -= city[root];
            destroy[root] = true;
            cout << cntCity << "\n";
        }
    }

    return 0;
}