10分求调
查看原帖
10分求调
964822
protractor半圆仪楼主2024/3/9 10:52

前边的求助帖没看懂,代码求调

#include<iostream>
#define lint long long
using namespace std;
struct xds{
    int l,r,k,g,f;
}xd[800050];
lint a[200050];
int n,m;
int op,x,y;
lint k;
void init(int id,int l,int r)
{
    xd[id].f=0,xd[id].l=l,xd[id].r=r;
    int mid=(l+r)/2;
    xd[id].k=0,xd[id].g=r-l+1;
    if(l-r)
	{
		init(id*2,l,mid);
		init(id*2+1,mid+1,r);
	}
}
lint cha(int id,int l,int r)
{
    if(xd[id].l<xd[id].r) xd[id*2].f^=xd[id].f,xd[id*2+1].f^=xd[id].f;
    if(xd[id].f) swap(xd[id].k,xd[id].g);
    xd[id].f=0;
    if(xd[id].l==l&&xd[id].r==r) return xd[id].k;
    else if(xd[id].l<=l&&xd[id].r>=r&&l<=r)
    {
        int mid=(xd[id].l+xd[id].r)/2;
        return cha(id*2,l,min(r,mid))+cha(id*2+1,max(l,mid+1),r);
    }
    return 0;
}
void gai(int id,int l,int r)
{
	if(xd[id].l==l&&xd[id].r==r) 
	{
		xd[id*2].f^=1;
		xd[id*2+1].f^=1;
		swap(xd[id].k,xd[id].g);
	}
    else if(xd[id].l<=l&&xd[id].r>=r&&l<=r)
    {
        int mid=(xd[id].l+xd[id].r)/2;
        gai(id*2,l,min(r,mid));
		gai(id*2+1,max(l,mid+1),r);
		xd[id].k=xd[id*2].k+xd[id*2+1].k;
		xd[id].g=xd[id*2].g+xd[id*2+1].g;
    }
}
int main()
{
    cin>>n>>m;
    init(1,1,n);
    for(int i=1;i<=m;i++)
    {
        cin>>op>>x>>y;
        if(op) cout<<cha(1,x,y)<<'\n';
        else
        {
        	gai(1,x,y);
		}
    }
    return 0;
}
2024/3/9 10:52
加载中...