一、题面

UVA11020

二、分析

最近脑子有点不好使吧,这题还想了很久。

对于给定的两个值要满足题面中的条件,那么我们可以把这两个值转化到平面中的坐标去理解。

首先,需要考虑的是维护的所有点其实是一个严格有序的,画个图就可以理解了。

此时,在维护的所有点的基础上,如果来了一个点,我们可以先考虑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用法】的更多相关文章

  1. 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 ...

  2. 二叉搜索树、AVL平衡二叉搜索树、红黑树、多路查找树

    1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要 ...

  3. 算法:非平衡二叉搜索树(UnBalanced Binary Search Tree)

    背景 很多场景下都需要将元素存储到已排序的集合中.用数组来存储,搜索效率非常高: O(log n),但是插入效率比较低:O(n).用链表来存储,插入效率和搜索效率都比较低:O(n).如何能提供插入和搜 ...

  4. LeetCode 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树

    第108题 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...

  5. 手写AVL平衡二叉搜索树

    手写AVL平衡二叉搜索树 二叉搜索树的局限性 先说一下什么是二叉搜索树,二叉树每个节点只有两个节点,二叉搜索树的每个左子节点的值小于其父节点的值,每个右子节点的值大于其左子节点的值.如下图: 二叉搜索 ...

  6. 看动画学算法之:平衡二叉搜索树AVL Tree

    目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜 ...

  7. 算法进阶面试题04——平衡二叉搜索树、AVL/红黑/SB树、删除和调整平衡的方法、输出大楼轮廓、累加和等于num的最长数组、滴滴Xor

    接着第三课的内容和讲了第四课的部分内容 1.介绍二叉搜索树 在二叉树上,何为一个节点的后继节点? 何为搜索二叉树? 如何实现搜索二叉树的查找?插入?删除? 二叉树的概念上衍生出的. 任何一个节点,左比 ...

  8. 【数据结构与算法Python版学习笔记】树——平衡二叉搜索树(AVL树)

    定义 能够在key插入时一直保持平衡的二叉查找树: AVL树 利用AVL树实现ADT Map, 基本上与BST的实现相同,不同之处仅在于二叉树的生成与维护过程 平衡因子 AVL树的实现中, 需要对每个 ...

  9. AVL平衡二叉搜索树原理及各项操作编程实现

    C语言版 #include<stdio.h> #include "fatal.h" struct AvlNode; typedef struct AvlNode *Po ...

随机推荐

  1. java反射机制学习代码

    根据 http://www.iteye.com/topic/137944 文档进行学习 代码如下: package reflectTest; import java.lang.reflect.*; i ...

  2. 遍历ListView,查出每一项的内容

    private ListView.OnItemClickListener showItemDetail = new ListView.OnItemClickListener() { public vo ...

  3. 移动直播app怎么做

    今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,教你从零开始搭建一个完整的iOS直播app,希望能帮助到更多的人更快的了解直播. 了解直播 1 热门直播产品: ...

  4. 8 种提升 ASP.NET Web API 性能的方法 (转)

    出处:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常棒的 ...

  5. ScreenCapture-HDwik5.0整合教程

    示例下载:http://yunpan.cn/Q9qzFmf6sF57z 1.上传ScreenCapture文件夹 2.上传upload.php文件 2.1修改upload.php路径 3.修改Scre ...

  6. bean 的各个属性

    http://www.springframework.org/schema/beans/spring-beans.xsd org.springframework.beans.factory.confi ...

  7. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

  8. C++笔记16之const的用法总结

    const主要是为了程序的健壮型,减少程序出错. 最基本的用法: const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100) int  ...

  9. excel中如何让每n行显示同一个数据

    由于需要将数据按照下表格式存储,以方便读取展示,年份列需要每隔7行再递增1 方法: 1. 输入这个公式: = INT((ROW(E1)-1)/ 5)+ 1 进入一个空白单元格,您可以在其中填写序列号, ...

  10. Kubernetes 集群安装部署

    etcd集群配置 master节点配置 1.安装kubernetes etcd [root@k8s ~]# yum -y install kubernetes-master etcd 2.配置 etc ...