UKE求条
查看原帖
UKE求条
1231938
wrongaaa楼主2024/7/9 15:02
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct Node {
	int l,r,id;
};

int n,q,sq,tot;
vector<int> a,ans,cnt;
vector<Node> Q;

void add(int p) {
	if (cnt[a[p]]++ == 0)
		tot += 1;
}

void del(int p) {
	if (--cnt[a[p]] == 0)
		tot -= 1;
}

bool cmp(const Node &a,const Node &b) {
	if (a.l / sq != b.l / sq)
		return a.l < b.l;
	if ((a.l / sq) & 1)
		return a.r < b.r;
	else 
		return b.r < a.r;
}

signed main() {
	cin >> n;
	sq = sqrt(n) + 1,sq = min(sq,n);
	a.resize(n);
	for (auto &i : a)
		cin >> i;
	
	cin >> q;
	Q.resize(q);
	for (int i = 0; i < q; i++) {
		cin >> Q[i].l >> Q[i].r;
		Q[i].l--,Q[i].r--;
		Q[i].id = i;
	}
	
	sort(Q.begin(),Q.end(),cmp);
	
	ans.resize(q),cnt.resize(n);
	
	int L = 1,R = 0;
	
	for (auto v : Q) {
		auto l = v.l,r = v.r,id = v.id;
		while (L < l)
			del(L++);
		while (L > l)
			add(--L);
		while (R < r)
			add(++R);
		while (R > r)
			del(R--);
		ans[id] = tot;
	}
	
	for (auto i : ans)
		cout << i << endl;
	
	return 0;
}
2024/7/9 15:02
加载中...