乱人伦 国语对白海角社区,五月激情丁香婷婷综合中文字幕,欧美伊人婷婷久久五月综合,亚洲精品无amm毛片,亚洲男人第一无码AV网站,国产日韩欧美丝袜一区二区,亚洲一区精品在线观看

Rooks Defenders(二分)-南宫28

Rooks Defenders(二分)

2026-01-18 01:42:02投稿人:云開(kāi)app(珠海)有限公司圍觀2763 評(píng)論

Rooks Defenders(二分)

題目 https://codeforces.com/contest/1679/problem/C

題意 :給定一個(gè)的矩陣,有三種操作

  • 往矩陣埋一顆地雷,保證對(duì)應(yīng)的點(diǎn)之前不存在地雷 。
  • 往矩陣挖掉一個(gè)顆地雷 ,保證對(duì)應(yīng)的點(diǎn)之前存在地雷。
  • 查詢(xún)子矩陣是否所有點(diǎn)都被地雷覆蓋 。一個(gè)點(diǎn)(x,y)被地雷覆蓋,當(dāng)且僅當(dāng)至少存在一個(gè)地雷(a,b),使得x==a或y==b 。即至少存在一個(gè)地雷和它同行或同列 。

思路 :維護(hù)沒(méi)有被地雷覆蓋的行和列 。對(duì)于每次查詢(xún)  ,如果在對(duì)應(yīng)范圍內(nèi) ,存在至少一個(gè)沒(méi)有被覆蓋的行 ,和至少一個(gè)沒(méi)有被覆蓋的列 ,則說(shuō)明子矩陣沒(méi)有被覆蓋 。否則,說(shuō)明矩陣被完全覆蓋。詳見(jiàn)代碼  。


#include using namespace std;const int maxn = 100010;int n, q, op;int x, y, x2, y2;setrow, col;int numr[maxn], numc[maxn];void init() { 	row.clear();	col.clear();	memset(numr, 0, sizeof(numr));	memset(numc, 0, sizeof(numc));	vectorve;	for (int i = 1; i <= n; ++i) { 		ve.push_back(i);	}	row = { ve.begin(), ve.end()};	col = { ve.begin(), ve.end()};}// 查找s集合是否存在 [st,ed] 的元素 bool check(set&s, int st, int ed) { 	// >= st	// 用通用lower_bound超時(shí)了