zoukankan      html  css  js  c++  java
  • AC日记——色板游戏 洛谷 P1558

    色板游戏

    思路:

      sb题;

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    struct TreeNodeType {
        int l,r,dis,mid,flag;
    };
    struct TreeNodeType tree[maxn<<2];
    int n,m,T,bit[31];
    inline void in(int &now)
    {
        char Cget=getchar();now=0;
        while(Cget>'9'||Cget<'0')Cget=getchar();
        while(Cget>='0'&&Cget<='9')
        {
            now=now*10+Cget-'0';
            Cget=getchar();
        }
    }
    void build(int now,int l,int r)
    {
        tree[now].l=l,tree[now].r=r,tree[now].dis=1;
        if(l==r) return;tree[now].mid=l+r>>1;
        build(now<<1,l,tree[now].mid);
        build(now<<1|1,tree[now].mid+1,r);
    }
    inline void pushdown(int now)
    {
        tree[now<<1].dis=tree[now].flag;
        tree[now<<1].flag=tree[now].flag;
        tree[now<<1|1].dis=tree[now].flag;
        tree[now<<1|1].flag=tree[now].flag;
        tree[now].flag=0;
    }
    inline void updata(int now,int l,int r,int x)
    {
        if(tree[now].l>=l&&tree[now].r<=r)
        {
            tree[now].dis=bit[x];
            tree[now].flag=bit[x];
            return;
        }
        if(tree[now].flag) pushdown(now);
        if(l<=tree[now].mid) updata(now<<1,l,r,x);
        if(r>tree[now].mid) updata(now<<1|1,l,r,x);
        tree[now].dis=tree[now<<1].dis|tree[now<<1|1].dis;
    }
    inline int query(int now,int l,int r)
    {
        if(tree[now].l>=l&&tree[now].r<=r) return tree[now].dis;
        if(tree[now].flag) pushdown(now);int res=0;
        if(l<=tree[now].mid) res|=query(now<<1,l,r);
        if(r>tree[now].mid) res|=query(now<<1|1,l,r);
        return res;
    }
    inline int Count(int x)
    {
        int res=0;
        for(int i=1;i<=30;i++) if(x&bit[i]) res++;
        return res;
    }
    int main()
    {
        bit[1]=1;
        for(int i=2;i<=30;i++) bit[i]=bit[i-1]*2;
        in(n),in(T),in(m),build(1,1,n);
        char op[5];int l,r,x;
        while(m--)
        {
            scanf("%s",op),in(l),in(r);
            if(l>r) swap(l,r);
            if(op[0]=='C') in(x),updata(1,l,r,x);
            else printf("%d
    ",Count(query(1,l,r)));
        }
        return 0;
    }
  • 相关阅读:
    项目总结_写代码
    项目总结_el表达式
    项目总结plc_过滤器规则(filter)_忽略过滤的js和css文件
    tomcat 启动错误
    每天学点java_Eclipse修改author名
    每天学点java_FileOutputSteam类
    每天学点java_File类
    11.28日日记
    《深入理解计算机系统》学习中期
    开始《深入理解计算机系统》
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6939683.html
Copyright © 2011-2022 走看看