set.erase(int x)可以将x删除,利用这个特性,可以做到一次性删除
https://atcoder.jp/contests/abc370/tasks/abc370_d
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define lowbit(x) (x&-x)
using namespace std;
const double pi=acos(-1);
void solve(){
int h,w,q;cin>>h>>w>>q;
vector<set<int>> hmp(h+1),wmp(w+1);
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
hmp[i].insert(j);
wmp[j].insert(i);
}
}
auto del=[&](int x,int y){
hmp[x].erase(y);
wmp[y].erase(x);
};
while(q--){
int x,y;cin>>x>>y;
x--,y--;
if(hmp[x].count(y)){
del(x,y);
continue;
}
if(!hmp[x].empty()){
auto it=hmp[x].upper_bound(y);
if(it!=hmp[x].end()) del(x,*it);
if(!hmp[x].empty()){
it=hmp[x].upper_bound(y);
if(it!=hmp[x].begin()){
it--;del(x,*it);
}
}
}
if(!wmp[y].empty()){
auto it=wmp[y].upper_bound(x);
if(it!=wmp[y].end()) del(*it,y);
if(!wmp[y].empty()){
it=wmp[y].upper_bound(x);
if(it!=wmp[y].begin()){
it--;del(*it,y);
}
}
}
}
int ans=0;
for(int i=0;i<h;i++){
ans+=hmp[i].size();
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}
标签:upper,set,int,wmp,hmp,立大功,--,erase,del
From: https://www.cnblogs.com/TaopiTTT/p/18473176