首页 > 其他分享 >Codeforces Round #773 E

Codeforces Round #773 E

时间:2022-09-01 20:13:22浏览次数:50  
标签:const 773 int Codeforces else 该点 我们 Round define

Anonymity Is Important

我们最开始会想到用三个状态表示 其实并不用我们只需要用 0表示这个人没病 1表示不确定有病(这样我们就可以用set来做了)
要是一个区间给了有病 我们只有把其他的所有人都排除成没病才行
比如我们 110000010000111 这个中间的1不一定是一定有病的 他必须被一个区间包括 并且有且仅有他一个1
这里我们可以想到线段树对于每个赋值 让左端点等于r即可(初始化为inf) 然后我们check 该点左边第一个1到该点 区间最小值是否小于该点右边第一个1的下标即可
这里只用了单点修改 区间赋值 所以只用pushup的线段树即可 我们每个点最多修改成一次 0 每个查询最多修改一次 O(nlogn)
注意这里set要多插俩个 不然会越界

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define Endl '\n'
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define inf 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
struct node{
    int l,r,sum;
}tree[N<<2];
void pushup(node &u,node &l,node &r){
    u.sum=min(l.sum,r.sum);
}
inline void pushup(int u){
    pushup(tree[u],tree[u<<1],tree[u<<1|1]);
}
inline void build(int i,int l,int r){
    tree[i].l=l;tree[i].r=r;
    if(l==r){
        tree[i].sum=inf; //按要求赋值
        return ;
    }
    int mid=l+r>>1;
    build(i<<1,l,mid);
    build(i<<1|1,mid+1,r);
    pushup(i);
}
inline void modify(int i,int dis,int k){
    if(tree[i].l==tree[i].r){
        tree[i].sum=min(tree[i].sum,k);//按要求 单点修改
        return ;
    }
    if(dis<=tree[i<<1].r)modify(i<<1,dis,k);
    else modify(i<<1|1,dis,k);
    pushup(i);
}

inline node query(int i,int l,int r){
    //if(l>r)return{0};
    node s;
    if(tree[i].l>=l && tree[i].r<=r)return tree[i];
    else if (tree[i*2].r>=r)  s= query(i<<1,l,r);
    else if(tree[i*2+1].l<=l) s= query(i<<1|1,l,r);
    else{
        auto left = query(i<<1,l,r);
        auto right= query(i<<1|1,l,r);
        node res;
        pushup(res,left,right);
        return res;
    }
    return s;
}
void solve() {
    int n,m;cin>>n>>m;
    set<int>s;
    for(int i=0;i<=n+1;i++)s.insert(i);
    build(1,1,n);
    while(m--){
        int op;cin>>op;
        if(!op){
            int l,r,x;cin>>l>>r>>x;
            if(x){
                modify(1,l,r);
            }else{
                while(s.size()){
                    auto i=s.lower_bound(l);
                    if(*i>r)break;
                    else s.erase(i);
                }
            }
        }else{
            int x;cin>>x;
            if(s.count(x)==0)cout<<"NO"<<endl;
            else {
                auto i=s.lower_bound(x),j=s.upper_bound(x);
                i--;
                if(query(1,*i+1,x).sum<*j)cout<<"YES"<<endl;
                else cout<<"N/A"<<endl;
            }
        }
    }
}
signed main(){
    fast
    int T;T=1;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:const,773,int,Codeforces,else,该点,我们,Round,define
From: https://www.cnblogs.com/ycllz/p/16647682.html

相关文章

  • Educational Codeforces Round 134 (Rated for Div. 2)
    DMaxiumAnd贪心,优先满足高位,每次判断是否能够满足这一位答案为1,如果能则更新答案,这样显然是优的EPrefixFunction模仿求前缀函数的算法,先预处理求出\(|S|\)的前缀函......
  • Educational Codeforces Round 134 (Rated for Div. 2)
    EducationalCodeforcesRound134(RatedforDiv.2)目录EducationalCodeforcesRound134(RatedforDiv.2)D.MaximumANDE.PrefixFunctionQueriesD.Maximum......
  • Codeforces Round #606(B-D)
     Dashboard-CodeforcesRound#606(Div.2,basedonTechnocup2020EliminationRound4)-CodeforcesB.MakeThemOdd题意:一个数组,每次选择一个数,将数组中的......
  • IHostedService(BackgroundService)的启动和停止顺序
    一句话总结:按照Add顺序启动,先启动,后停止.Host源代码publicasyncTaskStartAsync(CancellationTokencancellationToken=default(CancellationToken)){ _hos......
  • Codeforces Round #817 (Div. 4) ABCDEFG
    https://codeforces.com/contest/1722/problem/A#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<int,int>PII;constintN=200200,......
  • 【C++】ceil floor round 函数
    https://blog.csdn.net/dangzhangjing97/article/details/81279862?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRL......
  • Codeforces Round #817 (Div. 4)
    CF传送门因为洛谷题库未更新,所以给出的题面都是CF的。现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目\(qwq\)A.SpellCheck萌萌题,把字符串放桶里......
  • Codeforces Round #817 (Div. 4)E Counting Rectangles
    CountingRectangles思维把所有的矩形左上角都叠在一起,就会发现是一个二维前缀和的求解问题:\(\sum_{i=h_s+1}^{h_b-1}\sum_{j=w_s+1}^{w_b-1}(i*j*cnt_{ij})\)这个显......
  • .NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)
    在默认的.net项目中如果我们注入一个服务或者后台服务,常规的做法如下 注册后台服务builder.Services.AddHostedService<ClearLogTask>();针对继承自接口的服务......
  • Codeforces Round #774 E
    这道题感觉没有E平时的难度首先我们感性理解一下相交的数只有可能是一个数的幂次才能相交比如248;3927;然后我们把他们行单独提出来再观察一下幂次发现其实都是......