主席树样例对拍全过,但是WA0求调
查看原帖
主席树样例对拍全过,但是WA0求调
484918
eipai10楼主2025/8/2 16:17

值域是[0,mx]的

#include<bits/stdc++.h>
using namespace std;
#define _for(i, a, b) for(int i  = (a); i <= (b); ++i)
const int NN = 2E5 + 5;
int mx;
struct SegTree{
	int id = 0;
	struct Node{
		int cnt = 0, lson = 0, rson = 0;
	}T[NN * 35];
	void Upd(int &x, int hx, int k, int d, int l = 0, int r = mx){
		if(l > k || r < k) return;
		x = ++id;
		auto &t = T[x], &h = T[hx];
		t = h, t.cnt += d;
		if(l == r) return;
		int mid = l + r >> 1;
		Upd(t.lson, h.lson, k, d, l, mid), Upd(t.rson, h.rson, k, d, mid + 1, r);
	}
	int Qry(int x, int ql, int qr, int l = 0, int r = mx){
		if(r < ql || l > qr) return 0;
		auto &t = T[x];
		if(ql <= l && r <= qr) return t.cnt;
		int mid = l + r >> 1;
		return Qry(t.lson, ql, qr, l, mid) + Qry(t.rson, ql, qr, mid + 1, r);
	}
}ST;
int A[NN], R[NN];
int Query(int l, int r, int ql, int qr){
	return ST.Qry(R[r], ql, qr) - ST.Qry(R[l - 1], ql, qr);
}
int main(){
	ios::sync_with_stdio(false), cin.tie(0);
	int n, m;
	cin >> n >> m;
	_for(i, 1, n) cin >> A[i], mx = max(mx, A[i]);
	_for(i, 1, mx) ST.Upd(R[i], R[i - 1], A[i], 1);
	_for(i, 1, m){
		int b, x, l, r, ans = 0;
		cin >> b >> x >> l >> r;
		for(int h = 18, res; h >= 0; --h){
			res = 1 << h;
			if(!(b & res) && Query(l, r, ans + res - x, ans + res * 2 - 1 - x)) ans += res;
			if((b & res) && !Query(l, r, ans - x, ans + res - 1 - x)) ans += res;
		}
		cout << (b ^ ans) << "\n";
	}
	return 0;
}
2025/8/2 16:17
加载中...