CF -1679C
作者:互联网
题意:当t=1加入一个点,每个点可以影响一行和一列,t=2删除某个点,t=3判断这个矩形内的每个点是否都可以影响。
思路:开始时直接暴力,T了,然后看了看题解,学习了一波树状数组 Orz。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pll; const int N=1e5+50; map<pll,ll> mp,mq; ll l[2][N]; ll cntl[N],cntr[N]; ll lowbit(ll x){ return x&(-x); } void update(ll t,ll x,ll y,ll n){ for(ll i=x;i<=n;i+=lowbit(i)) l[t][i]+=y; } ll getsum(ll t,ll x){ ll ans=0; for(ll i=x;i;i-=lowbit(i)) ans+=l[t][i]; return ans; } signed main(){ ios::sync_with_stdio(false); cin.tie(0); ll n,m;cin>>n>>m; while(m--){ ll t,x,y,p,q;cin>>t; if(t==1){ cin>>x>>y; cntl[y]++;cntr[x]++; if(cntr[x]==1) update(0,x,1,n); if(cntl[y]==1) update(1,y,1,n); } else if(t==2){ cin>>x>>y; cntl[y]--;cntr[x]--; if(!cntl[y]) update(1,y,-1,n); if(!cntr[x]) update(0,x,-1,n); } else{ cin>>x>>y>>p>>q; if((getsum(1,q)-getsum(1,y-1)==q-y+1)||(getsum(0,p)-getsum(0,x-1))==p-x+1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } }
标签:cin,ll,cntl,update,CF,getsum,cntr,1679C 来源: https://www.cnblogs.com/hhzp/p/16293825.html