求助!P3870 WA10%
  • 板块学术版
  • 楼主lijunxi_luqiao
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/24 16:14
  • 上次更新2024/7/24 19:21:42
查看原帖
求助!P3870 WA10%
1006406
lijunxi_luqiao楼主2024/7/24 16:14

代码如下:

#include<iostream>
using namespace std;
int n,m,sum[400005],add[400004];
void pushup(int rt)
{
    sum[rt]=sum[rt<<1]+sum[(rt<<1)+1];
}
void pushdown(int rt,int len)
{
    if(add[rt])
    {
        sum[rt<<1]=(len+1>>1)-sum[rt<<1],
        sum[(rt<<1)+1]=(len>>1)-sum[(rt<<1)+1],
        add[rt<<1]=add[(rt<<1)+1]=1;
        add[rt]=0;
    }
}
void update(int ul,int ur,int l,int r,int rt)
{
    if(ul<=l&&ur>=r)
    {
        sum[rt]=r-l+1-sum[rt];
        add[rt]=1;
        return ;
    }
    int mid=l+r>>1;
    pushdown(rt,r-l+1);
    if(ul<=mid)
        update(ul,ur,l,mid,rt<<1);
    if(ur>mid)
        update(ul,ur,mid+1,r,(rt<<1)+1);
    pushup(rt);
}
int query(int ql,int qr,int l,int r,int rt)
{
    if(ql<=l&&qr>=r)
    {
        return sum[rt];
    }
    int mid=l+r>>1,ret=0;
    pushdown(rt,r-l+1);
    if(ql<=mid)
        ret+=query(ql,qr,l,mid,rt<<1);
    if(qr>mid)
        ret+=query(ql,qr,mid+1,r,(rt<<1)+1);
    return ret;
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int c,a,b;
        cin>>c>>a>>b;
        if(c==0)
            update(a,b,1,n,1);
        if(c==1)
            cout<<query(a,b,1,n,1)<<'\n';
    }
    return 0;
}
2024/7/24 16:14
加载中...