题解
2026-05-05 15:26:15
发布于:湖南
1阅读
0回复
0点赞
题意
给定一个长度为 n 的数组,进行 m 次询问。每次询问给出一个区间 [l, r],要求输出:这个区间里有多少个不同的数字。
思路
1.先输入数组长度 n 和询问次数 m。
2.输入数组的 n 个数字,存入数组 a 中(从下标 1 开始存)。
3.对于每一次询问:
输入区间左端点 l 和右端点 r。
创建一个集合 unordered_set,用来自动去重。
把数组中从 l 到 r 的所有数字插入集合。
集合的大小 s.size() 就是区间内不同数字的个数。
4.每次询问后输出答案。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int a[5005];
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
while (m--) {
int l, r;
cin >> l >> r;
unordered_set<int> s;
for (int i = l; i <= r; ++i) {
s.insert(a[i]);
}
cout << s.size() << '\n';
}
return 0;
}

这里空空如也








有帮助,赞一个