为什么全RE
查看原帖
为什么全RE
553671
chenhaotian0219楼主2023/6/21 11:11
#include<bits/stdc++.h>
using namespace std;
const int kkk=1e6+5;
int n,m,q;
struct stree{
    bool lazy[35],color[35];
    int l,r;
}tree[kkk];
void build(int id,int l,int r){
    for(int i=1;i<=m;i++){
        tree[id].lazy[i]=0;
        tree[id].color[i]=0;
    }
    tree[id].color[1]=1;
    tree[id].l=l,tree[id].r=r;
    int mid=(l+r)/2;
    build(id*2,l,mid);
    build(id*2+1,mid+1,r);
}
void push_down(int x)
{
    if(tree[x].l!=tree[x].r)
        for(int i=1;i<=m;i++){
            if(tree[x].lazy[i]){
                tree[x*2].color[i]=1;
                tree[x*2].color[i]=1;
                tree[x].lazy[i]=0;
            }
        }
}
void up_data(int index,int l,int r,int k)
{
    if(tree[index].r<=r && tree[index].l>=l)
    {
        tree[index].lazy[k]=1;
        tree[index].color[k]=1;
        return ;
    }
    push_down(index);
    if(tree[index*2].r>=l)
        up_data(index*2,l,r,k);
    if(tree[index*2+1].l<=r)
        up_data(index*2+1,l,r,k);
    for(int i=1;i<=m;i++){
        if(tree[2*index].color[i] || tree[2*index+1].color[i])
            tree[index].color[i]=1;
    }
    return ;
}
bool search(int index,int l,int r,int k)
{
    if(tree[index].l>=l && tree[index].r<=r)
        return tree[index].color[k];
    push_down(index);
    int num=0;
    if(tree[index*2].r>=l)
        num=num||search(index*2,l,r,k);
    if(tree[index*2+1].l<=r)
        num=num||search(index*2+1,l,r,k);
    return num;
}
int get(int index,int l,int r){
    int ans=0;
    for(int i=1;i<=m;i++)
        ans+=search(index,l,r,i);
    return ans;
}
int main(){
    scanf("%d%d%d",&n,&m,&q);
    build(1,1,n);
    for(int i=1;i<=q;i++){
        char op;
        int a,b;
        scanf("%c%d%d",&op,&a,&b);
        if(op=='C'){
            int c;
            scanf("%d",&c);
            up_data(1,a,b,c);
        }
        else{
            printf("%d\n",get(1,a,b));
        }
    }
    return 0;
}
2023/6/21 11:11
加载中...