主席树WA求条
查看原帖
主席树WA求条
790188
bsdsdb楼主2024/9/2 20:09
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const ll MAXN = 40e6, MAXV = 1073741824;

struct sec {
	ll val, len;
	sec(ll v = 0, ll l = 0) {
		val = v;
		len = l;
	}
};
struct opr {
	ll val;
	opr(ll v = 0) {
		val = v;
	}
};
sec operator+(sec x, sec y) {
	return sec(x.val + y.val, x.len + y.len);
}
void pas(opr x, opr& y) {
	y.val += x.val;
}
void com(opr x, sec& y) {
	y.val += x.val;
}
struct segTree {
	ll size, rt[MAXN + 5], rtc, lc[MAXN + 5], rc[MAXN + 5];
	sec val[MAXN + 5];
	opr tag[MAXN + 5];
	void pushdown(ll x) {
		pas(tag[x], tag[lc[x]]);
		com(tag[x], val[lc[x]]);
		pas(tag[x], tag[rc[x]]);
		com(tag[x], val[rc[x]]);
		tag[x] = opr();
	}
	void pushup(ll x) {
		val[x] = val[lc[x]] + val[rc[x]];
	}
	ll clone(ll x) {
		ll nd = ++size;
		val[nd] = val[x];
		tag[nd] = tag[x];
		lc[nd] = lc[x];
		rc[nd] = rc[x];
		return nd;
	}
	segTree() {
		size = 1;
		rt[0] = 1;
		rtc = 0;
	}
	ll mdf(ll x, ll lx, ll rx, ll l, ll r, ll k, bool isrt) {
		if (r <= lx || rx <= l) {
			return x;
		}
		x = clone(x);
		if (isrt) {
			rt[++rtc] = x;
		}
		if (l <= lx && rx <= r) {
			pas(opr(k), tag[x]);
			com(opr(k), val[x]);
			return x;
		}
		pushdown(x);
		ll mid = (lx + rx) / 2;
		lc[x] = mdf(lc[x], lx, mid, l, r, k, 0);
		rc[x] = mdf(rc[x], mid, rx, l, r, k, 0);
		pushup(x);
		return x;
	}
	ll qry(ll li, ll ri, ll lx, ll rx, ll rk) {
		if (lx + 1 == rx) {
			return lx;
		}
		pushdown(li);
		pushdown(ri);
		ll mid = (lx + rx) / 2;
		if (rk <= val[lc[ri]].val - val[lc[li]].val) {
			return qry(lc[li], lc[ri], lx, mid, rk);
		} else {
			return qry(rc[li], rc[ri], mid, rx, rk - (val[lc[ri]].val - val[lc[li]].val));
		}
	}
} st;

ll n, q;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> q;
	for (ll i = 1, a; i <= n; i++) {
		cin >> a;
		st.mdf(st.rt[i - 1], 1, MAXV + 1, a, a + 1, 1, 1);
	}
	while (q--) {
		ll l, r, rk;
		cin >> l >> r >> rk;
		cout << st.qry(st.rt[l - 1], st.rt[r], 1, MAXV + 1, rk) << endl;
	}
	return 0;
}
2024/9/2 20:09
加载中...