T609557 【map模板】数字查询系统

解题思路

这道题目要求我们实现一个数字查询系统,判断给定的数字是否存在于预先给定的集合中。由于数字的范围可能很大(-10^9到10^9),传统的数组标记法不再适用,因此需要使用更高效的数据结构。

方法思路

  1. 使用map容器:由于数字的范围很大,使用数组标记法会消耗过多内存。这里使用C++的map容器来记录集合中的数字。map基于红黑树实现,可以高效地进行插入和查找操作。

  2. 输入处理

    • 首先读取集合大小n和查询次数m

    • 然后读取n个数字,将它们插入到map中,对应的值设为1(表示存在)。

  3. 查询处理

    • 对于每个查询的数字,检查它是否存在于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;
}

 

posted @ 2025-05-20 17:15  CRt0729  阅读(12)  评论(0)    收藏  举报