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; }