The Preliminary Contest for ICPC Asia Xuzhou 2019【B. so easy】(set 解法 与正解 unordered_map+并查集)
发布日期:2021-06-29 14:25:26
浏览次数:2
分类:技术文章
本文共 1442 字,大约阅读时间需要 4 分钟。
题目大意
给你两个操作,op=1时,将那个数不可用,op=2时进行查询功能 找到从x开始第一个存在的数
非官方题解
set 内置红黑树,有默认从小到大排序功能,所以我们可以暴力一发,不过要逆向思维,对于op=1,我们就放入set中 对于op=2,我们就判断是否存在于set中,然后判断一下是否在n范围内 最后输出位置跳出循环
#include#include using namespace std;set st;int n,m;int main(){ while(~scanf("%d%d",&n,&m)){ st.clear(); while(m--){ int p,x; int ff=1; scanf("%d%d",&p,&x); if(p==1) st.insert(x); else{ for(int i=x;i<=n&&ff;i++){ if(!st.count(i)){ printf("%d\n",i); ff=0; } } } } } return 0;}
官方题解
今天算是开了眼界,知道了unordered_map 其实和map差不多,简单讲一下区别:map和set差不多都有内置红黑树,就会自动按key值按字典序从小到大排序 而unordered_map 是采用了哈希函数,没有了排序功能 从名字就看的出来。。。 但是强大的点我们甚至可以用常数的时间进行查找的功能 最坏情况下也才是O(n) 而map的话因为排序了起步都是O(nlogn) 然后官方题解采用方式还添加了并查集
不过本题把下面代码unordered_map 改为map也能过
#includeusing namespace std;unordered_map mp;int n,m;int find_pre(int x){ if(!mp.count(x)) return x; return mp[x]=find_pre(mp[x]);}int main(){ scanf("%d %d",&n,&m); int op,x; while(m--){ scanf("%d %d",&op,&x); if(op==1) mp[x]=find_pre(x+1); else{ x=find_pre(x); if(x>n) printf("-1\n"); else printf("%d\n",x); } } return 0;}
学如逆水行舟,不进则退
转载地址:https://chocolate.blog.csdn.net/article/details/100605154 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月07日 12时15分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
jstl标签详解
2019-04-29
Eclipse中使用SVN的使用
2019-04-29
JSON.parse和eval的区别
2019-04-29
JQuery中$.ajax()方法参数详解
2019-04-29
正则表达式的数字实例
2019-04-29
OGNL表达式struts2标签“%,#,$”的区别
2019-04-29
struts2中<s:if>标签的使用
2019-04-29
js 刷新页面window.location.reload();
2019-04-29
【转】EasyUI 验证
2019-04-29
java开发时内存溢出问题
2019-04-29
【easyui】combobox 关于省市联动
2019-04-29
设置csdn皮肤方法,更改自己喜欢的老版皮肤
2019-04-29
Eclipse中无法查看JDK源码,解决方法
2019-04-29
Git操作常用口令
2019-04-29
IDEA去除掉虚线,波浪线,和下划线实线的方法
2019-04-29
MYSQL新特性secure_file_priv 读写文件
2019-04-29
idea中的一些常用快捷键
2019-04-29