其他分享
首页 > 其他分享> > CF -1679C

CF -1679C

作者:互联网

Problem - 1679C - Codeforces

题意:当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