30 分求助玄关
查看原帖
30 分求助玄关
576639
woshishabi11451444楼主2024/8/27 15:28
#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;
const int M = 1026;

int n, q, mod, a[N], lazy[4 * N];
bitset<M> ans, tr[4 * N];
 
int read(){
	int x = 0, f = 1;
	char ch = getchar_unlocked();
	for(; ch < '0' || ch > '9'; ch = getchar_unlocked()){
		if(ch == '-') f = -1;
	}
	for(; ch >= '0' && ch <= '9'; ch = getchar_unlocked()){
		x = (x << 3) + (x << 1) + ch - '0';
	}
	return x * f;
}
 
void build(int id, int l, int r){
	if(l == r){
		tr[id][a[l]] = 1;
		return ;
	}
	int mid = (l + r) >> 1;
	build((id << 1), l, mid), build(((id << 1) | 1), mid + 1, r);
	tr[id] = (tr[id << 1] ^ tr[(id << 1) | 1]);
}

void Merge(int id, int x){
	tr[id] = ((tr[id] << x) | (tr[id] >> (mod - x)));
	lazy[id] = ((lazy[id] + x) & (mod - 1));
}

void tag(int id){
	Merge((id << 1), lazy[id]), Merge(((id << 1) | 1), lazy[id]);
	lazy[id] = 0;
}

void change(int id, int l, int r, int p, int q, int x){
	if(p > q || !x) return ;
	if(p <= l && q >= r){
		Merge(id, x);
		return ;
	}
	if(r < p || l > q) return ;
	int mid = (l + r) >> 1;
	tag(id);
	change((id << 1), l, mid, p, q, x), change(((id << 1) | 1), mid + 1, r, p, q, x);
	tr[id] = (tr[id << 1] ^ tr[(id << 1) | 1]);
}

void query(int id, int l, int r, int p, int q){
	if(p > q) return ;
	if(p <= l && q >= r){
		ans ^= tr[id];
		return ;
	}
	if(r < p || l > q) return ;
	int mid = (l + r) >> 1;
	tag(id);
	query((id << 1), l, mid, p, q), query(((id << 1) | 1), mid + 1, r, p, q);
}
 
int main(){
	ios::sync_with_stdio(0), cin.tie(0);
	n = read(), mod = read(), q = read();
	mod = (1 << mod);
	for(int i = 1; i <= n; i++) a[i] = read();
	build(1, 1, n);
	for(int i = 1, op, l, r, x; i <= q; i++){
		op = read(), l = read(), r = read();
		if(l > r) swap(l, r);
		if(op == 1){
			x = read();
			change(1, 1, n, l, r, x);
		}
		else{
			ans.reset();
			query(1, 1, n, l, r);
			int res = 0;
			for(int j = 1; j < mod; j++){
				if(ans[j]) res ^= j;
			}
			cout << res << '\n';
		}
	}
	return 0;
} 

前三个点过了,后面的点只有 WA。

2024/8/27 15:28
加载中...