题意:

      给你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. JAVA多线程与锁机制

    JAVA多线程与锁机制 1 关于Synchronized和lock synchronized是Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码 ...

  2. celery 与 flask 实现异步任务调度

    Flask 定了2中上下文,来实现机遇线程\协程的,wsgi服务的请求(request.session)和存储(g,current_app )过程,通过栈来完成不同线程和协程的上下文切换,在与cele ...

  3. P4285 [SHOI2008]汉诺塔 题解 (乱搞)

    题目链接 P4285 [SHOI2008]汉诺塔 解题思路 提供一种打表新思路 先来证明一个其他题解都没有证明的结论:\(ans[i]\)是可由\(ans[i-1]\)线性递推的. (\(ans[i] ...

  4. 锁与同步器的基础--AQS

    什么是AQS AQS全名AbstractQueueSynchronizer,可以翻译为抽象队列同步器 Abstract--说明该类需要被继承,提供实现的框架和一些必要的功能 事实上,AQS也的确提供了 ...

  5. 自己整理的acm模板

    第一次上传: 链接:点我下载 大部分常用的模板都弄了,剩下的坑以后再补... 第二次上传: 链接:点我下载 更新内容:新增ST表.分块 第三次上传: 链接:点我下载 更新内容:新增AC自动机,修改权值 ...

  6. 《逆向工程核心原理》——IAThook

    hook逻辑写入dll中,注入dll. #include "pch.h" #include <tchar.h> #include "windows.h&quo ...

  7. PTA 链表逆置

    6-3 链表逆置 (20 分)   本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头.链表结点定义如下: struct ListNode { int data; struct L ...

  8. DNS 缓存中毒--Kaminsky 攻击复现

    0x00 搭建实验环境 使用3台Ubuntu 16.04虚拟机,可到下面的参考链接下载 攻击的服务是BIND9,由于条件限制,这里使用本地的一台虚拟机当作远程DNS解析器,关闭了DNSSEC服务,其中 ...

  9. Android Stuio让我濒临崩溃的bug之cause: unable to find valid certification path to requested target

    •问题描述 像往常一样,打开 $android studio$ 开启愉快的开发之旅: 写着写着,右下角弹出一个对话,说 $android studio$ 有新版本可更新: 有新版本为何不用,果断点击 ...

  10. PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1065 单身狗 (25 分) 凌宸1642 题目描述: "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大 ...