题意:

      给你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. Image Super-Resolution via Sparse Representation——基于稀疏表示的超分辨率重建

    经典超分辨率重建论文,基于稀疏表示.下面首先介绍稀疏表示,然后介绍论文的基本思想和算法优化过程,最后使用python进行实验. 稀疏表示 稀疏表示是指,使用过完备字典中少量向量的线性组合来表示某个元素 ...

  2. 迷宫问题(DFS)

    声明:图片及内容基于https://www.bilibili.com/video/BV1oE41177wk?t=3245 问题及分析 8*8的迷宫,最外周是墙,0表示可以走,1表示不可以走 设置迷宫 ...

  3. PHP配置 2. 日志相关配置

    例如,在disable_functions,定义禁用phpinfo函数, # vim /usr/local/php/etc/php.ini disable_functions=phpinfo,eval ...

  4. mybatis&plus系列------Mysql的JSON字段的读取和转换

    mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...

  5. POJ_2065 SETI 【同余高斯消元】

    一.题目  SETI 二.分析 给定一个模数,一串字符串,字符串长度为N,相当于是N个方程的答案,而这N个方程中有N个未知数,要求的就是这N个未知数的值,很显然的高斯消元,遇到模数和除法,用逆元就好. ...

  6. Java并发编程之并发关键字

    volatile 保证可见性 一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,这个新值对其他线程来说是立即可见的 一个线程读取volatile变量的值时,该变量在本地内存中缓 ...

  7. Java-TreeMap和Guava-HashMultiset

    一.Java-TreeMap 1.数据结构 底层数据结构是裸的红黑树,保证元素有序,没有比较器Comparator的情况按照key的自然排序,可自定义比较器.线程不安全. 可以存null,但是key不 ...

  8. 前端vue使用高德地图

    首先,注册Key 1.注册开发者账号,成为高德开放平台开发者 2.登陆之后,在进入「应用管理」 页面「创建新应用」 3.为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 ...

  9. Java学习笔记--文件IO

    简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...

  10. BUAA_OO_2020_第三单元总结

    BUAA_OO_2020_第三单元总结 JML理论基础 简介 JML(Java Modeling Language)是一种用于对JAVA程序进行规格化设计的语言,其通过定义接口所包含方法的行为,来约束 ...