T609557 【map模板】数字查询系统
解题思路
这道题目要求我们实现一个数字查询系统,判断给定的数字是否存在于预先给定的集合中。由于数字的范围可能很大(-10^9到10^9),传统的数组标记法不再适用,因此需要使用更高效的数据结构。
方法思路
-
使用map容器:由于数字的范围很大,使用数组标记法会消耗过多内存。这里使用C++的
map容器来记录集合中的数字。map基于红黑树实现,可以高效地进行插入和查找操作。 -
输入处理:
-
首先读取集合大小
n和查询次数m。 -
然后读取
n个数字,将它们插入到map中,对应的值设为1(表示存在)。
-
-
查询处理:
-
对于每个查询的数字,检查它是否存在于
map中。如果存在,输出"YES";否则输出"NO"。
-
这种方法的时间复杂度为O(n log n + m log n),因为map的插入和查找操作都是O(log n)的时间复杂度。
代码注释
#include<bits/stdc++.h> using namespace std; int n,m,x; // n:集合大小,m:查询次数,x:临时变量 map<int,int> vis; // 使用map记录存在的数字 int main() { cin >> n >> m; // 读取集合大小和查询次数 for(int i = 1; i <= n; i++) // 读取集合中的数字 { cin >> x; // 读取当前数字 vis[x] = 1; // 在map中标记该数字存在 } while(m--) // 处理每个查询 { cin >> x; // 读取查询数字 if(vis[x]) cout << "YES" << endl; // 如果数字存在 else cout << "NO" << endl; // 如果数字不存在 } return 0; }

浙公网安备 33010602011771号