AC_Dream 1216 G - Beautiful People

简介:
题意:
有n个人每人有一个力气值Si,美丽值Bi,满足Bi>Bj&&Si>Sj 或者 Bi<Bj&&Si<Sj 的人可以
一起参见晚会,问最多有多少人可以一起参见晚会。
思路: 我们根据S从小到大将所有人排序,然后看B最长的上升子序列的长度求出来即可! 
在排序中优先对S排序,S相等的则对B进行由大到小的排序,why?
也就是对于S相同的,我们先选取B最大的值插入LIS中,因为比如 S1=1, B1 = 1 
S1=1, B1 = 2, S1=1, B1 = 3, 如果不进行排序,直接按照求B中的lis,显然长度
为3,显然是不对的,因为相同的S中只能选择一个B出来!所以就要对S相同的B进行

降序排序! 这样就变成了一个裸lis!


#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define N 100005
using namespace std;

struct node{
    int x, y;
    int p;
};

bool cmp(node a, node b){
    if(a.x == b.x)
           return a.y > b.y;
    return a.x < b.x;
}

bool myCmp(node a, node b){
    return a.y <= b.y;//这里要写成 <=;因为upper_bound返回的是“元素值 >插入值”
                      //最后一个插入值的位置,元素值 == 插入值的时候,默认 元素值
                      // >插入值,但在该题中,相等的情况下不能算在lis中的! 
}

node a[N];
node c[N];

int pre[N], path[N];

int main(){
    int n;
    while(scanf("%d", &n) != EOF){
        for(int i=0; i<n; ++i)
            scanf("%d%d", &a[i].x, &a[i].y), a[i].p = i+1;
            
        sort(a, a+n, cmp);    
        c[0] = a[0];
        pre[0] = 0;
        path[0] = 0;
        int len = 1;
        
        for(int i=1; i<n; ++i){
            int k = upper_bound(c, c+len, a[i], myCmp) - c;
            pre[i] = k ? path[k-1] : 0;//当前插入节点i的位置为k,它的前一个(k-1位置)元素的序号! 
            path[k] = i;//当前插入k位置的节点的序号 
            c[k] = a[i];
            if(k+1 > len) len = k+1;
        }
        int tmp = path[len-1];
        printf("%d\n", len);
        printf("%d", a[path[len-1]].p);
        for(int i=len-2; i >= 0; --i){
            tmp = pre[tmp];
            printf(" %d", a[tmp].p);
        }
        printf("\n");
            
    }
    return 0;
}


目录
相关文章
07HUI - 普通列表(hui-list)
07HUI - 普通列表(hui-list)
45 0
|
5月前
|
Python
【Python】已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’
【Python】已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’
258 0
|
5月前
|
XML 移动开发 数据格式
【Python】已解决:bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: html5
【Python】已解决:bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: html5
442 1
|
4月前
|
Python
【Python 3】解决FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml.
文章讨论了在使用Python的BeautifulSoup库时遇到的"Couldn't find a tree builder with"错误,并提供了解决方案。
169 0
codeforces 344B - Simple Molecules
题意就是给出3个原子的化学价,然后组成一个分子,要保证这个分子是稳定的,如果你还记得高中化学知识的话这个很容易理解,然后让你求出1-2 2-3 1-3 号原子之间有几条键, 这里我分别用ta tb tc 表示, 用数学的方法表示出来的话就是a = tc + tb; b = ta+tc; c = ta + tb;可能有多种情况,只要输出一种即可。
43 0
|
人工智能
P8969 幻梦 | Dream with Dynamic
P8969 幻梦 | Dream with Dynamic
173 0
CF1265E Beautiful Mirrors (概率dp)
CF1265E Beautiful Mirrors (概率dp)
74 0
CF1265E Beautiful Mirrors (概率dp)
|
Web App开发 前端开发 iOS开发
Bulma 教程,Bulma 指南,Bulma 实战,Bulma 中文手册
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/78328987 B...
1794 0
python报错bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml.
python报错bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml.
ZOJ - Problem Set - 3960 What Kind of Friends Are You?
ZOJ - Problem Set - 3960 What Kind of Friends Are You?
88 0
ZOJ - Problem Set - 3960 What Kind of Friends Are You?