ABC370D求调
  • 板块灌水区
  • 楼主hwc2011
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/7 22:43
  • 上次更新2024/9/8 11:13:22
查看原帖
ABC370D求调
1313003
hwc2011楼主2024/9/7 22:43
#include<bits/stdc++.h>
using namespace std;
const int N=4e5+5;
int h,w,q,ans;
set<int>s1[N],s2[N];
set<int>::iterator upp; 
signed main(){
	cin>>h>>w>>q;
    for(int i=1;i<=h;i++){
    	for(int j=1;j<=w;j++){
			s1[i].insert(j);
			s2[j].insert(i);
		}
    }
    while(q--){
    	int r,c;
    	cin>>r>>c;
        if(s1[r].count(c)){
			s1[r].erase(c);
			s2[c].erase(r);
			continue;
		}
        upp=s1[r].upper_bound(c);
		if(upp!=s1[r].end()){
			s2[*upp].erase(r);
			s1[r].erase(*upp);
		}
		if(upp!=s1[r].begin()){
			s2[*--upp].erase(r);
			s1[r].erase(*upp);
		}
        upp=s2[c].lower_bound(r);
		if(upp!=s2[c].end()){
			s1[*upp].erase(c);
			s2[c].erase(*upp);
		}
		if(upp!=s2[c].begin()){
			s1[*--upp].erase(c);
			s2[c].erase(*upp);
		}
    }
	for(int i=1;i<=h;i++) ans+=s1[i].size();
    cout<<ans;
}

C++20(gcc 12.2),样例AC2,RE1;测试点AC7,WA13,RE6。

2024/9/7 22:43
加载中...