UVA_11020 Efficient Solutions 【平衡二叉搜索树set用法】
一、题面
二、分析
最近脑子有点不好使吧,这题还想了很久。
对于给定的两个值要满足题面中的条件,那么我们可以把这两个值转化到平面中的坐标去理解。
首先,需要考虑的是维护的所有点其实是一个严格有序的,画个图就可以理解了。
此时,在维护的所有点的基础上,如果来了一个点,我们可以先考虑x坐标。
如果这个点x值比所有维护的点中最小的x值还小,那么它必然是有效的,之间加入,再删除后面被这个点控制的点。
如果这个点的y值比在象限中它前面(相对于x)的点的y值要大,那就不需要加入了,因为被它前面这个点控制了。
如果比它前面这个点的y值小,其实就需要加入,因为本身维护的所有点是有序的,那么这个点加入之后必然是有效的,接下来就可以考虑删除被这个点控制的点了。
删除点的话,只需要考虑后面x值比当前点大的点,且y值比当前点大。画个图就好理解了。
实现的话,用有序的且可以重复的multiset,结合lower_bound和upper_bound。
三、AC代码
#include <bits/stdc++.h> using namespace std; struct Node
{
int l, c;
bool operator<(const Node &t)const
{
return l < t.l || (l == t.l && c < t.c);
}
}; int main()
{
//freopen("input.txt", "r", stdin);
int T, N;
scanf("%d", &T);
for(int Case = ; Case <= T; Case++)
{
if(Case > ) puts("");
printf("Case #%d:\n", Case);
multiset<Node> ST;
Node p;
scanf("%d", &N);
for(int i = ; i < N; i++)
{
scanf("%d %d", &p.l, &p.c);
multiset<Node>::iterator itr = ST.lower_bound(p);
if(itr == ST.begin() || (--itr)->c > p.c)
{
ST.insert(p);
itr = ST.upper_bound(p);
while(itr != ST.end() && itr->c >= p.c) ST.erase(itr++);
}
printf("%d\n", ST.size());
}
}
return ;
}
UVA_11020 Efficient Solutions 【平衡二叉搜索树set用法】的更多相关文章
- convert sorted list to binary search tree(将有序链表转成平衡二叉搜索树)
		
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
 - 二叉搜索树、AVL平衡二叉搜索树、红黑树、多路查找树
		
1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要 ...
 - 算法:非平衡二叉搜索树(UnBalanced Binary Search Tree)
		
背景 很多场景下都需要将元素存储到已排序的集合中.用数组来存储,搜索效率非常高: O(log n),但是插入效率比较低:O(n).用链表来存储,插入效率和搜索效率都比较低:O(n).如何能提供插入和搜 ...
 - LeetCode 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树
		
第108题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...
 - 手写AVL平衡二叉搜索树
		
手写AVL平衡二叉搜索树 二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点的值,每个右子节点的值大于其左子节点的值.如下图: 二叉搜索 ...
 - 看动画学算法之:平衡二叉搜索树AVL Tree
		
目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜 ...
 - 算法进阶面试题04——平衡二叉搜索树、AVL/红黑/SB树、删除和调整平衡的方法、输出大楼轮廓、累加和等于num的最长数组、滴滴Xor
		
接着第三课的内容和讲了第四课的部分内容 1.介绍二叉搜索树 在二叉树上,何为一个节点的后继节点? 何为搜索二叉树? 如何实现搜索二叉树的查找?插入?删除? 二叉树的概念上衍生出的. 任何一个节点,左比 ...
 - 【数据结构与算法Python版学习笔记】树——平衡二叉搜索树(AVL树)
		
定义 能够在key插入时一直保持平衡的二叉查找树: AVL树 利用AVL树实现ADT Map, 基本上与BST的实现相同,不同之处仅在于二叉树的生成与维护过程 平衡因子 AVL树的实现中, 需要对每个 ...
 - AVL平衡二叉搜索树原理及各项操作编程实现
		
C语言版 #include<stdio.h> #include "fatal.h" struct AvlNode; typedef struct AvlNode *Po ...
 
随机推荐
- win10自带虚拟机安装CentOS7系统(转)
			
出处:http://blog.csdn.net/bimabushihaodongxi/article/details/53677490 话说工欲善其事,必先利其器,在我准备学习Linux之前先要完成l ...
 - kalilinux、parrotsecos没有声音
			
Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下: (1)在终端执行命令:systemctl --user enable pulseaudio (2)在/ ...
 - What Are Tango Poses?Tango姿态是什么?
			
What Are Tango Poses?什么是Tango姿态? As your device moves through 3D space, it calculates where it is ( ...
 - mysql - json串新增字段
			
1.建表 -- 建表 drop table if exists ta_product2; CREATE TABLE ta_product2( id int primary key auto_incre ...
 - 使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值
			
使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值. 当前仅总结使用EN5339芯片的方案 Vout = Ra*0.6/Rb + 0.6 芯片手册推荐Ra取348K,则 3.3V时,取R ...
 - Thread in depth 1: The basic
			
Every single thread has the follow elements: Execution Context:Every thread has a execution context ...
 - ActiveX 控件重绘无效问题,用CClientDC 而不是CPaintDC
			
ActiveX 控件重绘子控件时,用Invalid()会出现无效的情况即不会更新界面. OnPaint 方法里,是用的 CPaintDC,经测试无效,后换CClientDC,发现可以,百度查他们的区别 ...
 - Windows服务器管理与优化
			
一.服务器自动重启windows服务器运行时间长了,内存会爆满,比如数据库会缓存大量的数量,IIS进程也会缓存数据而没有及时释放.这样需要定时重启服务器来释放内存. 创建任务计划,如在 每周一/周三/ ...
 - Npoi--合并单元格
			
一.缘由. 最近公司的一个需求,导出 Excel, 相同的数据进行合并,并且 还有 二级合并. 最终效果图如下: 哈哈哈哈哈,图表略微有些丑陋,请大家不要介意. 他的原始数据,是一条一条的, 如下图: ...
 - Mysql 中日期类型bigint和datetime互转
			
MySql数据库中字段类型bigint 长度是10位的 mysql> select (from_unixtime(1554047999))as datatime;+--------------- ...