一、题面

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. dedecms导出csv文件

    1.mshd_orderlist.tpl <form id="frm" method="GET" action="mshd_orderlist. ...

  2. 详解jQuery的$符号和init函数

    本文所有代码,出自jQuery.1.5.2,为方便理解,引入类的概念,虽然jQuery不是基于面向对象思想. jQuery是现在最流行的JavaScript框架, $是其中最常见的符号,已经在jQue ...

  3. mvc html.PartialView()传参

    方式一,viewDatapublic static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, ...

  4. 阿里云OSS-js分片上传

    使用 aliyun-oss-sdk-4.4.4.min.js 方式一 客户端授权 https://help.aliyun.com/document_detail/32069.html 通过new OS ...

  5. Git 客户端基本配置

    Welcome to Git (version -preview20140611) Run 'git help git' to display the help index. Run 'git hel ...

  6. Spring MVC3.2 通过Servlet3.0实现文件上传

    Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- s ...

  7. After Upgrade To Release 12.1.3 Users Receive "Function Not Available To This Responsibility" Error While Selecting Sub Menus Under Diagnostics (Doc ID 1200743.1)

    APPLIES TO: Oracle Application Object Library - Version 12.1.3 to 12.1.3 [Release 12.1] Information ...

  8. mdadm 软RAID

    mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的自身缺陷(不能用作启动分区.使用C ...

  9. Win 8下Rime输入法无法同步的临时解决方法

    意外发现了Rime输入法(OS X上叫鼠须管'Squirrel',windows上叫小狼毫'Weasel',linux上叫中州韵'ibus-rime',连名字都起的这么牛逼),真是神器啊,流畅的速度, ...

  10. 解决vs2017调试出现脚本错误(/Community/Common7/IDE/PrivateAssemblies/plugin.vs.js) 方法

    原文地址:http://bkcoding.cn/post_1204.html 新装的vs2017编译时出现当前页面脚本错误 url:/Community/Common7/IDE/PrivateAsse ...