全RE,求帮助
查看原帖
全RE,求帮助
206463
烬丶星落少年楼主2022/10/22 16:24

rt,感激不尽

#include<cstdio>
#include<iostream>
#define MAXN 100005
using namespace std;

int t, n, q, m;
int s[MAXN], las[MAXN], nxt[MAXN];
int num[MAXN << 6], lson[MAXN << 6], rson[MAXN << 6];
int rt[MAXN], cnt;

int Reads() {
	int f = 1, res = 0;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-')
			f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		res = (res << 3) + (res << 1) + (ch ^ 48);
		ch = getchar();
	}
	return f * res;
}

void Builds(int lef, int rig, int k) {
	if (lef == rig) {
		num[k] = las[lef];
		return ;
	}
	int mid = (lef + rig) >> 1;
	lson[k] = ++cnt;
	rson[k] = ++cnt;
	Builds(lef, mid, lson[k]);
	Builds(mid + 1, rig, rson[k]);
	return ;
}

void Changes(int lef, int rig, int p, int v, int lass, int nows) {
	if (lef == rig) {
		num[nows] = v;
		return ;
	}
	int mid = (lef + rig) >> 1;
	if (p <= mid) {
		rson[nows] = rson[lass];
		lson[nows] = ++cnt;
		Changes(lef, mid, p, v, lson[lass], lson[nows]);
	} else {
		lson[nows] = lson[lass];
		rson[nows] = ++cnt;
		Changes(mid + 1, rig, p, v, rson[lass], rson[nows]);
	}
	return ;
}

int Query(int lef, int rig, int p, int k) {
	if (lef == rig)
		return num[k];
	int mid = (lef + rig) >> 1;
	if (p <= mid)
		return Query(lef, mid, p, lson[k]);
	else Query(mid + 1, rig, p, rson[k]);
}

int main() {
	
	t = Reads(), n = Reads(), q = Reads(), m = Reads();
	for (int i = 1; i <= n; i++)
		s[i] = Reads();
	
	for (int i = 1; i <= m; i++)
		las[i] = n + 1;
	for (int i = n; i; i--)
		nxt[i] = las[s[i]], las[s[i]] = i;
	
	rt[0] = cnt = 1;
	Builds(1, m, rt[0]);
	for (int i = 1; i <= n; i++) {
		rt[i] = ++cnt;
		Changes(1, m, s[i], nxt[i], rt[i - 1], rt[i]);
	}
	
	while (q--) {
		int d = Reads(), ns = 0;
		for (int i = 1; i <= d; i++) {
			int t = Reads();
			if (ns <= n)
				ns = Query(1, m, t, rt[ns]);
		}
		if (ns <= n)
			cout << "Yes\n";
		else cout << "No\n";
	}
	
	return 0;
	
}
2022/10/22 16:24
加载中...