思路事第一篇题的思路,不知道哪里错了,但好像哪里都错了
#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r,b,f;
}a[114514*4+1][35];
int l,o,ans,A,B,C,t;
char c;
bool vis[114];
void bld(int l,int r,int root,int cnt)
{
a[root][cnt].l=l;
a[root][cnt].r=r;
if(l==r)
{
if(cnt==1)
a[root][cnt].b=1;
return;
}
int mid=(l+r)/2;
bld(l,mid,root*2,cnt);
bld(mid+1,r,root*2+1,cnt);
}
void down(int root,int cnt)
{
a[root*2][cnt].f=a[root][cnt].f;
a[root*2+1][cnt].f=a[root][cnt].f;
a[root*2][cnt].b=a[root][cnt].f;
a[root*2+1][cnt].b=a[root][cnt].f;
a[root][cnt].f=0;
}
void sum(int x,int y,int root,int cnt)
{
if(a[root][cnt].l>=x&&a[root][cnt].r<=y)
{
if(a[root][cnt].b&&!vis[cnt])
ans++,vis[cnt]=1;
return;
}
if(a[root][cnt].f)
down(root,cnt);
int mid=(a[root][cnt].l+a[root][cnt].r)/2;
if(x<=mid)
sum(x,y,root*2,cnt);
if(y>mid)
sum(x,y,root*2+1,cnt);
}
void add(int x,int y,int root,int cnt)
{
if(a[root][cnt].l>=x&&a[root][cnt].r<=y)
{
if(cnt==C)
{
a[root][cnt].b=1;
a[root][cnt].f=1;
}
else
{
a[root][cnt].b=0;
a[root][cnt].f=0;
}
return;
}
if(a[root][cnt].f)
down(root,cnt);
int mid=(a[root][cnt].l+a[root][cnt].r)/2;
if(x<=mid)
add(x,y,root*2,cnt);
if(y>mid)
add(x,y,root*2+1,cnt);
}
int main()
{
cin>>l>>t>>o;
for(int i=1;i<=t;i++)
bld(1,l,1,i);
while(o--)
{
cin>>c>>A>>B;
if(c=='C')
{
cin>>C;
for(int i=1;i<=t;i++)
add(A,B,1,i);
}
else
{
ans=0;
memset(vis,0,sizeof vis);
for(int i=1;i<=t;i++)
sum(A,B,1,i);
cout<<ans<<endl;
}
}
}