就过了hack,其他测试点全wa,求求找下错误
  • 板块P1558 色板游戏
  • 楼主DKNOW
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/29 11:26
  • 上次更新2023/11/2 17:22:43
查看原帖
就过了hack,其他测试点全wa,求求找下错误
904352
DKNOW楼主2023/9/29 11:26
CODE:
#include <bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)

using namespace std;

const int N=1e5+10;

int fun1(int x)
{
    return (1LL<<(x-1));
}

int fun2(int x)
{
    int sum=0;
    while(x>0)
    {
        if((x&1)) sum++;
        x>>=1;
    }
    return sum;
}

class tree
{
private:
    struct node
    {
        int l,r,val,tag;
    }tr[N<<2];

    void push_up(node &u,node &ls,node &rs)
    {
        u.val=(ls.val|rs.val);
    }

    void push_up(int u)
    {
        if(tr[u].l==tr[u].r) return;
        push_up(tr[u],tr[u<<1],tr[u<<1|1]);
    }

    void push_down(node &u,node &ls,node &rs)
    {
        ls.val=ls.val=rs.val=rs.tag=u.tag;
        u.tag=0;
    }

    void push_down(int u)
    {
        if(tr[u].l==tr[u].r||tr[u].tag==0) return;
        push_down(tr[u],tr[u<<1],tr[u<<1|1]);
    }

public:
    void build(int u,int l,int r)
    {
        if(l==r)
        {
            tr[u]={l,r,1,0};
            return;
        }
        int mid=l+r>>1;
        build(u<<1,l,mid);
        build(u<<1|1,mid+1,r);
        tr[u]={l,r,1,0};
        push_up(u);
    }

    void modify(int u,int l,int r,int x)
    {
        push_down(u);
        if(tr[u].l==l&&tr[u].r==r)
        {
            tr[u].val=tr[u].tag=x;
            return ;
        }
        int mid=tr[u].l+tr[u].r>>1;
        if(r<=mid) modify(u<<1,l,r,x);
        else if(l>mid) modify(u<<1|1,l,r,x);
        else
        {
            modify(u<<1,l,mid,x);
            modify(u<<1|1,mid+1,r,x);
        }
        push_up(u);
    }

    node query(int u,int l,int r)
    {
        push_down(u);
        if(tr[u].l==l&&tr[u].r==r) return tr[u];
        int mid=tr[u].l+tr[u].r>>1;
        if(r<=mid) return query(u<<1,l,r);
        else if(l>mid) return query(u<<1|1,l,r);
        auto ls=query(u<<1,l,mid),rs=query(u<<1|1,mid+1,r);
        node ans={l,r};push_up(ans,ls,rs);
        return ans;
    }

}T;

signed main()
{
    int L,t,O;cin>>L>>t>>O;
    T.build(1,1,L);
    while(O--)
    {
        char op;cin>>op;
        if(op=='C')
        {
            int l,r,x;cin>>l>>r>>x;
            if(l>r) swap(l,r);
            T.modify(1,l,r,fun1(x));
        }
        else
        {
            int l,r;cin>>l>>r;
            if(l>r) swap(l,r);
            cout<<fun2(T.query(1,l,r).val)<<'\n';
        }
    }
    return 0;
}

2023/9/29 11:26
加载中...