萌新xds求调,样例未过
查看原帖
萌新xds求调,样例未过
923364
OIerlb楼主2024/8/15 08:56

rt

#include <bits/stdc++.h>

#define int long long

#define INF lONG_LONG_MAX

#define maxn 2005

using namespace std;

int n,m;

struct node{
	
	int lz,sum;
	
}t[maxn << 4];

void push_up(int k){
	
	t[k].sum = t[k << 1].sum + t[k << 1 | 1].sum;
	
}

void push_down(int k,int l,int r){
	
	int mid = (l + r) >> 1;
	
	if(t[k].lz == 1){
		
		t[k << 1].lz ^= 1;
		
		t[k << 1 | 1].lz ^= 1;
		
		t[k << 1].sum = mid - l + 1 - t[k << 1].sum;
		
		t[k << 1 | 1].sum = r - mid - t[k << 1 | 1].sum;
		
		t[k].lz = 0;
		
	}
	
}

void modify(int k,int l,int r,int ql,int qr){
	
	if(ql <= l && r <= qr){
		
		t[k].lz ^= 1;
		
		t[k].sum = r - l + 1 - t[k].sum;
		
	} else {
		
		push_down(k,l,r);
		
		int mid = (l + r) >> 1;
		
		if(ql <= mid) modify(k << 1,l,mid,ql,qr);
		
		else modify(k << 1 | 1,mid + 1,r,ql,qr);
		
		push_up(k);
		
	}
	
}

int query(int k,int l,int r,int ql,int qr){
	
	if(ql <= l && r <= qr){
		
		return t[k].sum;
		
	} else {
		
		push_down(k,l,r);
		
		int mid = (l + r) >> 1;
		
		int ans = 0;
		
		if(ql <= mid) ans += query(k << 1,l,mid,ql,qr);
		
		if(qr > mid) ans += query(k << 1 | 1,mid + 1,r,ql,qr);
		
		return ans;
		
	}
	
}

signed main(){
	
	ios::sync_with_stdio(0);
	
	cin.tie(0);
	
	cout.tie(0);
	
	cin >> n >> m;
	
	while(m --){
		
		int pd,l,r;
		
		cin >> pd >> l >> r;
		
		if(pd == 0) modify(1,1,n,l,r);
		
		else cout << query(1,1,n,l,r) << "\n";
		
	}
	
	return 0;
	
}
2024/8/15 08:56
加载中...