rt,怎么会MLE啊:
#include <iostream>
using namespace std;
const int N=100010;
struct Node
{
int l,r,lazy,col;
}tr[N*3];
void pushup(int u)
{
tr[u].col=tr[u<<1].col|tr[u<<1|1].col;
}
void pushdown(int u)
{
if(tr[u].lazy)
{
tr[u<<1].lazy=tr[u].lazy;
tr[u<<1].col=1<<tr[u<<1].lazy;
tr[u<<1|1].lazy=tr[u].lazy;
tr[u<<1|1].col=1<<tr[u<<1|1].lazy;
tr[u].lazy=0;
}
}
void build(int u,int l,int r)
{
if(l==r) tr[u]={l,r,0,0};
else
{
tr[u]={l,r,0,0};
int mid=l+r>>1;
if(l<=mid) build(u<<1,l,mid);
if(r>mid) build(u<<1|1,mid+1,r);
pushup(u);
}
}
void modify(int u,int l,int r,int x)
{
if(l<=tr[u].l&&tr[u].r<=r)
{
tr[u].col=1<<x;
tr[u].lazy=x;
}
else
{
pushdown(u);
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid) modify(u<<1,l,r,x);
if(r>mid) modify(u<<1|1,l,r,x);
pushup(u);
}
}
int query(int u,int l,int r)
{
if(l<=tr[u].l&&tr[u].r<=r) return tr[u].col;
else
{
pushdown(u);
int mid=tr[u].l+tr[u].r>>1;
int res=0;
if(l<=mid) res|=query(u>>1,l,r);
if(r>mid) res|=query(u>>1|1,l,r);
return res;
}
}
int main()
{
int l,t,o,a,b,c;
char ch;
cin>>l>>t>>o;
build(1,1,l);
modify(1,1,l,1);
while(o--)
{
cin>>ch;
if(ch=='C')
{
cin>>a>>b>>c;
if(a>b) swap(a,b);
modify(1,a,b,c);
}
else
{
cin>>a>>b;
if(a>b) swap(a,b);
int ans=0;
int x=query(1,a,b);
for(int i=1;i<=t;i++)
{
if(x&(1<<i)) ans++;
}
cout<<ans<<endl;
}
}
return 0;
}