Codeforces Beta Round #19 D. Points
2015-07-18 16:47
225 查看
题意:
给定一个平面, add(x,y), 增加一个点(x,y),保证以前不存在; delete(x,y), 删除一个点(x,y),保证存在你; query(x,y), 询问严格大于(x,y)的点,输出其中最小的一个,x为第一关键字,y为第二关键字。
思路:
A
数据范围为2*10^5, 每个值的范围为10^9, 按照(x,y)离散化, 按照x建立(m=不同(x,y)对的个数)区间为1……m的线段树, 在每个叶子结点上来存储当前信息是否存在,每个结点上记录当前表示区间有没有值存在和最大的y是多少。在删除的时候重置下标记。 查找的时候先根据x确定一个xi>x的线段树区间范围,然后在这个区间中查找一个满足yi>y的最小的y。
B
按照x离散化,为每个x建立一个set,存储当前x对应的y的信息。 按照x为区间建立线段树, 保存结点对应区间是否存在点对和区间中最大的y的信息。 在增加的时候走到相应的x那里, 然后在集合中增加。 在删除的时候走到相应的x那里,然后在集合中删除。 需要注意更新最大值y。 在查找的时候,查找xi>x的区间,在相应的区间中查找满足yi>y的最小的y。找到相应的x,然后在x中查找yi>y的最小值。 输出结果。
给定一个平面, add(x,y), 增加一个点(x,y),保证以前不存在; delete(x,y), 删除一个点(x,y),保证存在你; query(x,y), 询问严格大于(x,y)的点,输出其中最小的一个,x为第一关键字,y为第二关键字。
思路:
A
数据范围为2*10^5, 每个值的范围为10^9, 按照(x,y)离散化, 按照x建立(m=不同(x,y)对的个数)区间为1……m的线段树, 在每个叶子结点上来存储当前信息是否存在,每个结点上记录当前表示区间有没有值存在和最大的y是多少。在删除的时候重置下标记。 查找的时候先根据x确定一个xi>x的线段树区间范围,然后在这个区间中查找一个满足yi>y的最小的y。
B
按照x离散化,为每个x建立一个set,存储当前x对应的y的信息。 按照x为区间建立线段树, 保存结点对应区间是否存在点对和区间中最大的y的信息。 在增加的时候走到相应的x那里, 然后在集合中增加。 在删除的时候走到相应的x那里,然后在集合中删除。 需要注意更新最大值y。 在查找的时候,查找xi>x的区间,在相应的区间中查找满足yi>y的最小的y。找到相应的x,然后在x中查找yi>y的最小值。 输出结果。
相关文章推荐
- <转>如何在CentOS 5/6上安装EPEL 源
- Project Euler:Problem 76 Counting summations
- VC 获取任务栏窗口的句柄
- 计算机意外地重新启动或遇到错误。Windows 安装无法继续。若要安装Windows,请单击“确定”重新启动计算机,然后重新启动安装”。
- 用Maven整合SpringMVC+Spring+Hibernate 框架
- MySQL学习笔记——增删改查
- android view构造函数研究
- REdis数据结构服务器
- [转]java-Three Rules for Effective Exception Handling
- <转>提高iOS开发效率的方法和工具
- Memcached入门一
- 【暑假】[ 图论 ] MST、最短路总结
- 第三方登录之微信登录
- 【Cocos2d-x】CCArray
- mmseg 增加词库
- SSH Secure Shell Client用pub key认证登录linux
- OC学习笔记之OC内存管理
- android中Handler的源码分析
- 常用算法集锦
- 字典转model类、封装(OC中)