7713: 离散化去重 map

描述

 

“离散化”是指把一个无穷大的集合映射到一个有限的集合中。

如有n个整数,其中可能存在相同的数,现在需要你将其去重后得到的m个数用1~m来表示,同时保持原始的大小顺序不变,即在不改变数据相对大小的条件下,对数据进行相应的缩小。

如:

原数据:1, 999, 100000, 15

处理后:1, 3, 4, 2

同时给出若干查询,查询某个整数x被表示为1~m中的什么数?

 

 

输入

 

第一行为正整数n和q(1<=n<=100000,1<=q<=100000),表示原始数据个数和查询次数;

第二行为空格隔开的n个整数。

第三行为q个空格隔开的整数,每个整数为待查询的值。

 

 

输出

 

对于每次查询,输出被映射后的值,每行一个。

如果查询的值不存在,输出None

 

 

样例输入

 

10 3
1 2 2 3 5 5 8 9 9 10
2 9 11

样例输出

 

2
6
None

使用map有种用现代科技打古代人的感觉。。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3+10,inf = 0x3f3f3f3f;

int main()
{
    int n,m,i;
    cin >> n >> m;
    map<int,int> s,mp;
    map<int,int>::iterator it;
    for(int i = 1; i <= n; i++)
    {
        int x; scanf("%d",&x);
        s[x] = 1;
    }
    for(it = s.begin(),i = 1;it != s.end(); it++,i++)
    {
        mp[it->first] = i;
    }
    while(m--)
    {
        int x; scanf("%d",&x);
        if(mp[x]) printf("%d\n",mp[x]);
        else puts("None");
            
    }
    return 0;
}

 

posted @ 2023-10-15 22:39  CRt0729  阅读(31)  评论(0编辑  收藏  举报