Submission #930892

#TimeUsernameProblemLanguageResultExecution timeMemory
930892phoenix0423Furniture (JOI20_furniture)C++17
100 / 100
198 ms51504 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define int long long typedef pair<int, int> pll; #define fastio ios::sync_with_stdio(false), cin.tie(0) #define pb push_back #define eb emplace_back #define f first #define s second #define lowbit(x) x&-x; const int maxn = 1005; const int maxq = 1e6 + 5; const int INF = 1e18; int c[maxn][maxn]; int st[maxn][maxn]; pll coord[maxq]; int cnt[maxn * 2]; int ans[maxq]; int n, m, q; int dx[] = {0, 1, 0, -1}; int dy[] = {1, 0, -1, 0}; bool inbound(int x, int y){ return x >= 0 && y >= 0 && x < n && y < m;} void remove(int x, int y){ if(!st[x][y]) return; st[x][y] = 0, cnt[x + y] --; queue<pll> q; q.push({x, y}); while(!q.empty()){ auto [cx, cy] = q.front(); q.pop(); for(int d = 2; d < 4; d++){ int xx = cx + dx[d], yy = cy + dy[d]; if(!inbound(xx, yy) || !st[xx][yy]) continue; if(!st[xx + 1][yy] && !st[xx][yy + 1]){ cnt[xx + yy] --; st[xx][yy] = 0; q.push({xx, yy}); } } } q.push({x, y}); while(!q.empty()){ auto [cx, cy] = q.front(); q.pop(); for(int d = 0; d < 2; d++){ int xx = cx + dx[d], yy = cy + dy[d]; if(!inbound(xx, yy) || !st[xx][yy]) continue; int bad = (xx == 0 || !st[xx - 1][yy]) + (yy == 0 || !st[xx][yy - 1]); if(bad == 2){ cnt[xx + yy] --; st[xx][yy] = 0; q.push({xx, yy}); } } } } signed main(void){ fastio; cin>>n>>m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) cin>>c[i][j]; } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) st[i][j] = 1, cnt[i + j] ++; } cin>>q; for(int i = 0; i < q; i++){ cin>>coord[i].f>>coord[i].s; coord[i].f--, coord[i].s--; } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(c[i][j]){ remove(i, j); } } } for(int i = 0; i < q; i++){ auto [x, y] = coord[i]; if(st[x][y] && cnt[x + y] == 1) continue; if(st[x][y]) remove(x, y); ans[i] = 1; } for(int i = 0; i < q; i++) cout<<ans[i]<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...