ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF -1679C

2022-05-20 22:04:01  阅读:198  来源: 互联网

标签:cin ll cntl update CF getsum cntr 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有