题意:

      给你N个人,每个人有两个权值,x,y对于某一个人,如果不存在某一个人x' y',

x' < x && y' <= y 或者x' <= x && y' < y那么这个人就是优势人群,对于输入的这n个人,每输入一个人的时候就输出一次当前这个人加入之后的当前优势人群数量。

思路:

      可以在一个二维坐标系上找到规律,所有人都可以映射到二维坐标系上的某一个点,对于任意两个人不同的人(x,y都相等看成一个人)来说,如果他俩都是优势人群,那么他俩肯定存在这样的关系 x < x' && y > y',这样就在坐标系上形成了一个递减的线,还有就是在加人的过程中一定要记住,如果这个人在某一步不属于优势人群,那么他以后就不可能再是优势人群中的了,然后考虑每次增加一个人,有两种情况,(1)当前这个人不是优势人群,那么直接不做任何操作,判断方法比较简单,可以直接找到"大于等于"他的的第一个数的前一个,如果这个数的y比他小,那么就直接断定当前这个人不是优势人群。(2)就是加入当前这个人是优势人群,那么就直接先把这个人加到multiset中,加入之后可能吧别的人变成非优势群体,然后我们在找到"大于"当前这个人的第一个人开始,一直往后,如果y是大于等于当前这个人的,那么直接删除。

**如果a能淘汰b,b能淘汰c,那么a也一定能淘汰c,所以如果直接淘汰b不会影响淘汰c的

提示:

(1) 这里的大于等于只是位置上区分的(排序位置是x小的或者x相等y小的在前面)。

(2) 用multiset(可重集)的原因是可能有多个人x,y同时相等

(3) 如果不懂的话建议在二维坐标上模拟下,还有就是考虑下(1,2)(1,2)(1,2)(1,3)这样的数据,有利于理解二级排序。

(4)*.lower_bound 大于等于的第一个数

(5)*.upper_bound 大于的第一个数

#include<set>

#include<stdio.h>

using namespace std;

typedef struct NODE

{

    int x ,y;

    friend bool operator < (NODE a ,NODE b)

    {

        return a.x < b.x || a.x == b.x && a.y < b.y;

        //这个地方自己目前有不理解的地方,就是我之前写的优先队列的姿势在结合本体 

        // 应该是应该是return a.x > b.x || a.x == b.x && a.y > b.y;

       //没有正式的学过C++所以..

    }

}NODE;

multiset<NODE>myset;

multiset<NODE>::iterator it;

int main ()

{

    int t ,cas = 1 ,i ,x ,y ,n;

    NODE now;

    scanf("%d" ,&t);

    while(t--)

    {

        printf("Case #%d:\n" ,cas ++);

        scanf("%d" ,&n);

        myset.clear();

        for(i = 1 ;i <= n ;i ++)

        {

            scanf("%d %d" ,&x ,&y);

            now.x = x ,now.y = y;

            it = myset.lower_bound(now);

            if(it == myset.begin() ||(--it)->y > y)

            {

                myset.insert(now);

                it = myset.upper_bound(now);

                while(it != myset.end() && it -> y >= y)

                myset.erase(it++);

            }

            printf("%d\n" ,myset.size());

        }

        if(t) printf("\n");

    }

    return 0;

}

UVA11020 优势人群(multiset)的更多相关文章

  1. UVa 11020 Efficient Solutions(平衡二叉树/multiset )

    题意:有n个人,每个人有x.y两个属性,每次输入一个人(x,y).如果当前不存在一个人(x`,y`)的属性满足x`<=x,y`<y或者x`<x,y`<=y,就说这个人是有优势的 ...

  2. UVA 11020 Efficient Solutions+multiset的应用

    题目链接:点击进入 首先来讲,非常easy看到我们事实上仅仅要维护优势人群的集合:假设增加一个新的人,我们首先看一下优势人群中是否有人会让这个人失去优势,假设没有,则将这个人插入集合中.但要注意到这个 ...

  3. UVA - 11020 Efficient Solutions(Multiset)

    本题利用multiset解决.根据题意,如果我们用P(x,y)表示一个人,因为人可以相同,所以用multiset.我们会发现,如果所有人群都是有优势的,那么这些点呈现一个递减的趋势.如果刚刚插入一个人 ...

  4. STL(multiset) UVA 11020 Efficient Solutions

    题目传送门 题意:训练指南P228 分析:照着书上的做法,把点插入后把它后面不占优势的点删除,S.size ()就是优势的人数,时间复杂度O (nlogn) #include <bits/std ...

  5. 『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势

    在写<Asp.Net 服务器组件系列文档>之前,笔者不才,揣测微软战略用意: 微软利益诉求莫过于 微软产品和技术的市场份额: 因此,微软战略之一莫过于将 所有开发人员 团聚在 微软周围,以 ...

  6. 【公众号系列】SAP HANA 平台的优势

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP HANA 平台的优势   ...

  7. MySQL8.0-NoSQL和SQL的对比及MySQL的优势

    一.SQL VS NoSQL SQL:关系型数据库,用SQL语句来操作数据 NOSQL:非关系型数据库,NoSQL的含义是不仅仅有SQL,而实际上大多数NoSQL不用SQL来操作数据 常见的关系型数据 ...

  8. 神贴真开眼界:为什么很多人倡导重视能力和素质,但同时对学历有严格要求?——代表了上一场比赛的输赢,招聘成本很重要。如果上一场游戏失败了,尽量让自己成为当前群体的尖子。学历只是其中的一个作品而已,但学历代表了学生时代为之做出的牺牲。人群自有偏向集中性 good

    对于软件工程师职位,没学历没关系,如果真觉得自己才高八斗,请在简历里附上 github项目链接或者 appstore/google play上你的作品.如果学历比别人低,那么想必是把时间和精力用在了其 ...

  9. UVA11020 Efficient Solutions

    思路 先判断一个点能不能插入,能插入的话删除所有因为它而没有优势的点 注意 写 S.erase(it); it++; 会RE 要写 S.erase(it++); 代码 #include <cst ...

随机推荐

  1. 【Azure 云服务】Azure Cloud Service在发布新部署后遇见不能RDP(远程连接)到实例时如何处理?

    Azure 云服务是PaaS 的一个示例. 与 Azure 应用服务一样,此技术设计用于支持可缩放.可靠且运营成本低廉的应用程序. 同样,应用服务托管在虚拟机 (VM) 上,Azure 云服务也是如此 ...

  2. JVM笔记 -- JVM的发展以及基于栈的指令集架构

    2011年,JDK7发布,1.7u4中,开始启用新的垃圾回收器G1(但是不是默认). 2017年,发布JDK9,G1成为默认GC,代替CMS.(一般公司使用jdk8的时候,会通过参数,指定GC为G1) ...

  3. Docker 三剑客 到 k8s 介绍

    一.Docker 三剑客 Docker-Compose Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启 ...

  4. FTP操作/Passive/Active控制

    1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using ...

  5. linux软件deb打包及开机管理员自启动

    环境:Ubuntu 18.04/16.04  Qt:5.12.6 一 deb打包 1.建立目录结构 2.目录内容 1) 子目录DC520: Get以上内容步骤: (1)   创建目录DC520(自己软 ...

  6. sqli-labs系列——第四关

    less4 第四关的sql语句是这样的: select * from user where id=("$id"); ?id=1")–+回显正常 order by 4报错, ...

  7. SpringBoot-03 yaml+JSR303

    SpringBoot-03 yaml+JSR303 Yaml 1.配置文件 SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的 YAML是 "YAML Ain't a Ma ...

  8. 在docker容器中使用cplex-python37

    技术背景 线性规划是常见的问题求解形式,可以直接跟实际问题进行对接,包括目标函数的建模和各种约束条件的限制等,最后对参数进行各种变更,以找到满足约束条件情况下可以达到的最优解.Cplex是一个由IBM ...

  9. MongoDB 那些事(一文以蔽之)

    前言 身边一直都有小伙伴在问:MongoDB到底是什么?它有到底什么特性?有什么与众不同?在什么情况下使用MongoDB最合适?以什么样的姿势是最好的?难道就一定要用吗?....说实话,这些问题都问到 ...

  10. 20182217_刘洪宇 后门原理与实践 EXP2

    1.后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里有后门呢? 编译器留后门 操作系统留后门 最常见的当然还是应用程序中留后门 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序. - ...