MnZn求助!全WA 0Pts,只过了hack。
查看原帖
MnZn求助!全WA 0Pts,只过了hack。
749325
Sincerin楼主2023/8/4 23:05

RT,已经变成题解的形状力!还是过不掉。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define rd(n) n=read()
#define ri register int
const int N=100005;
inline int read()
{
	register int ans=0,f=0; register char ch=getchar();
	while(ch<'0'||ch>'9'){f^=(ch=='-');ch=getchar();}
	while(ch>='0'&&ch<='9'){ans=(ans<<3)+(ans<<1)+(ch^48);ch=getchar();}
	return f?-ans:ans;
}
inline void print(int n)
{
	if(n<0){putchar('-');n=-n;}
	if(n>9) print(n/10);
	putchar(n%10+'0');
}
int n,m,q,id,l,r,j,ans;
#define lson(p) p<<1
#define rson(p) p<<1|1 
struct SegmentTree{
    int l,r; 
    int sum,add;
    #define l(i) t[i][0].l
    #define r(i) t[i][0].r 
    #define sum(i,j) t[i][j].sum
    #define add(i,j) t[i][j].add
}t[N<<2][31]; 
inline void pushup(int p,int k)
{
	sum(p,k)=sum(lson(p),k)+sum(rson(p),k);
}
inline void build(int p,int l,int r,int k)
{
    l(p)=l;  r(p)=r;
    if(l==r) 
    {
        sum(p,k)=1;
        return;
    }
    ri mid=(l+r)>>1;
    build(lson(p),l,mid,k); 
	build(rson(p),mid+1,r,k);
    pushup(p,k);
}
inline void spread(int p,int k)
{
    if(add(p,k)=-1) 
    {
        sum(lson(p),k)=0; sum(rson(p),k)=0; 
        add(lson(p),k)=-1; add(rson(p),k)=-1; 
    } 
	else
	{   
		sum(lson(p),k)=sum(rson(p),k)=add(p,k); 
        add(lson(p),k)=add(rson(p),k)=add(p,k);	
	}  
    add(p,k)=0;
} 
inline void change(int p,int l,int r,int k,int v)
{
    if(l<=l(p)&&r>=r(p))
    {
        sum(p,v)=k;
        if(!k) add(p,v)=-1;
        else add(p,v)=k;
        return;
    }
    if(add(p,v)) spread(p,v);
    ri mid=(l(p)+r(p))>>1;
    if(l<=mid) change(lson(p),l,r,k,v);
    if(r>mid) change(rson(p),l,r,k,v);
    pushup(p,v);
} 
inline int query(int p,int l,int r,int k)
{
    if(l<=l(p)&&r>=r(p)) return sum(p,k);
    if(add(p,k)) spread(p,k);
    ri mid=(l(p)+r(p))>>1; int ans=0;
    if(l<=mid) ans+=query(lson(p),l,r,k);
    if(r>mid) ans+=query(rson(p),l,r,k);
    return ans;
}
char cc;
int k;
signed main(void)
{
	rd(n); rd(q); rd(m);
	build(1,1,n,1);
	while(m--)
	{
		cin>>cc;
		rd(l); rd(r);
		if(l>r) swap(l,r);
		if(cc=='C') 
		{
			rd(k);
			for(ri i=1;i<=q;++i)
			{
				if(i!=k) change(1,l,r,0,i);
				else change(1,l,r,1,i);
			}
		}
		else 
		{
			int ans=0;
			for(ri i=1;i<=q;++i)
			{
				if(query(1,l,r,i)) ++ans;
			}
			print(ans);
			puts("");
		}
	}
	return 0;
}

2023/8/4 23:05
加载中...