AC日记——色板游戏 洛谷 P1558

Posted Only U - IU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",Count(query(1,l,r)));
    }
    return 0;
}

 

以上是关于AC日记——色板游戏 洛谷 P1558的主要内容,如果未能解决你的问题,请参考以下文章

P1558 色板游戏

题解 P1558 色板游戏

线段树(压位)luogu P1558色板游戏

Luogu P1558 色板游戏

AC日记——国王游戏 洛谷 P1080

P1558 色板游戏 线段树(区间修改,区间查询)