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!

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdio>
 6 #define N 100005
 7 using namespace std;
 8 
 9 struct node{
10     int x, y;
11     int p;
12 };
13 
14 bool cmp(node a, node b){
15     if(a.x == b.x)
16            return a.y > b.y;
17     return a.x < b.x;
18 }
19 
20 bool myCmp(node a, node b){
21     return a.y <= b.y;//这里要写成 <=;因为upper_bound返回的是“元素值 >插入值”
22                       //最后一个插入值的位置,元素值 == 插入值的时候,默认 元素值
23                       // >插入值,但在该题中,相等的情况下不能算在lis中的! 
24 }
25 
26 node a[N];
27 node c[N];
28 
29 int pre[N], path[N];
30 
31 int main(){
32     int n;
33     while(scanf("%d", &n) != EOF){
34         for(int i=0; i<n; ++i)
35             scanf("%d%d", &a[i].x, &a[i].y), a[i].p = i+1;
36             
37         sort(a, a+n, cmp);    
38         c[0] = a[0];
39         pre[0] = 0;
40         path[0] = 0;
41         int len = 1;
42         
43         for(int i=1; i<n; ++i){
44             int k = upper_bound(c, c+len, a[i], myCmp) - c;
45             pre[i] = k ? path[k-1] : 0;//当前插入节点i的位置为k,它的前一个(k-1位置)元素的序号! 
46             path[k] = i;//当前插入k位置的节点的序号 
47             c[k] = a[i];
48             if(k+1 > len) len = k+1;
49         }
50         int tmp = path[len-1];
51         printf("%d\n", len);
52         printf("%d", a[path[len-1]].p);
53         for(int i=len-2; i >= 0; --i){
54             tmp = pre[tmp];
55             printf(" %d", a[tmp].p);
56         }
57         printf("\n");
58             
59     }
60     return 0;
61 }
View Code

 

转载于:https://www.cnblogs.com/hujunzheng/p/4004777.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云主机用linux还是winows,云服务器一般使用什么系统?Linux还是Windows?

云服务器一般使用什么系统?最常用的就是Linux以及Windows系统&#xff0c;两大系统各有不同优势&#xff0c;大家选择上也是存在差异的&#xff0c;接下来跟着小编来了解一下吧。Windows系统&#xff1a;一般情况来说&#xff0c;Windows系统常用的是Server 2003和Server 2008…

c语言程序中return的作用,单片机C语言程序中return dat 什么意思

/* 打开 ISP,IAP 功能 */void ISP_IAP_enable(void){EA 0; /* 关中断 */ISP_CONTR ISP_CONTR & 0x18; /* 0001,1000 */ISP_CONTR ISP_CONTR | WaitTime; /* 写入硬件延时 */ISP_CONTR ISP_CONTR | 0x80; /* ISPEN1 */}/* 关闭 ISP,IAP 功能 *…

java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案

1 try {2 //向指定的ip和端口发送数据~&#xff01;3 //先说明一下数据是谁发送过来的&#xff01;4 byte[] ip InetAddress.getLocalHost().getHostAddress().getBytes();5 …

二级c语言程序设计bug,《C语言及程序设计》实践项目——发现Bug

返回&#xff1a;贺老师课程教学链接【项目1-sin泰勒展式中的错误】下面是sin函数的泰勒展式&#xff1a;(注&#xff1a;x取弧度值&#xff0c;而非角度值)编写了double mysin(double x)用于求sin值&#xff0c;却“死”在了123上。剧透一下&#xff0c;循环没有问题(当然问题…

AC_Dream 1224 Robbers(贪心)

题意&#xff1a;n个抢劫犯分别抢到的金钱是k1, k2, k3,...&#xff0c;一共得到的金钱是m&#xff0c; 但是在分钱的时候是按照x1/y, x2/y, x3/y,....的比例进行分配的&#xff01;这样的话 一些抢劫犯就会觉得不公平&#xff0c;不公平度为|xi/y - ki/m|(浮点运算)&#xff0…

C语言编程出图形,C语言画出各种图形

矩形&#xff1a;(里面是空的)******** ** ** ********Program ended with exit code: 0for (int i 0; i < 5; i ) {for (int j 0; j < 7; j ) {//用条件判断打出*号if (i 0 || i 4 || j 0 || j 6 ) {printf("*");}else{printf(" "…

AC_Dream 1211 Reactor Cooling

1 /*2 题意&#xff1a;无源无汇&#xff0c;并且每条边的容量有上下界限的网络流问题&#xff01;既然无源无汇&#xff0c;那么素有的节点都应该满足“入流出流”&#xff01;3 输出每一条边的流量&#xff0c;使得满足上面的条件。&#xff08;如果u->v有流…

c语言中const对于define优点,为什么大多数C开发人员使用define而不是const?

这有一个非常可靠的原因&#xff1a;C中的const并不意味着一些常量。 这只是意味着一个variables是只读的。在编译器需要一个常量的地方(例如非VLA数组的数组大小)&#xff0c;使用constvariables(如fieldWidth是不可能的。他们不一样const只是一个限定符&#xff0c;它表示一个…

c语言程序设计期末试卷A,《C语言程序设计》期末试卷(A)..doc

《C语言程序设计》期末试卷(A).2011-12-1学期《C语言程序设计》期末试卷(A)班级____________姓名____________学号________________大题号一二三四总分得 分判卷 /核分人“一、选择题”使用答题卡选择。“二、看程序写运行结果”答题处&#xff1a;题号答 案二、1二、2二、3“三…

codeforces B. Strongly Connected City(dfs水过)

题意&#xff1a;有横向和纵向的街道&#xff0c;每个街道只有一个方向&#xff0c;垂直的街道相交会产生一个节点&#xff0c;这样每个节点都有两个方向&#xff0c; 问是否每一个节点都可以由其他的节点到达.... 思路&#xff1a;规律没有想到&#xff0c;直接爆搜&#xff0…

c语言数组两个值交换,如可交换两个数组中的元素?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include int main(void){int a[]{1,2,3,4,5,6,7,8};int b[]{9,10,11,12,13,15};int lena,lenb,randa,randb,randtimes;int i,temp;srand((unsigned)time(NULL));lena sizeof(a)/sizeof(int);lenb sizeof(b)/s…

Uvaoj 11248 Frequency Hopping(Dinic求最小割)

题意&#xff1a;1到n节点&#xff08;节点之间有一定的容量&#xff09;&#xff0c;需要流过C的流量&#xff0c;问是否可以&#xff1f;如果可以输出possible&#xff0c; 否则如果可以扩大任意一条边的容量 可以达到目的&#xff0c;那么输出possible option&#xff1a;接…

随机数归并排序c语言,用C语言实现归并排序

#include#include#include#include#define random(i) (rand()%i)#define N 12#define INFINITY 99999999//要排序的数存放在a数组汇总&#xff0c;p,q,r是数组下标void Merge(int *a,int p,int q,int r){int n1q-p1;int n2r-q;int *L(int *)malloc(sizeof(int)*n1);int *R(int …

UVAoj 11324 - The Largest Clique(tarjan + dp)

题意&#xff1a;给定一个有向图&#xff0c;寻找一个点数最大集合&#xff0c;使得这个集合中的任意两个点 u,v, 都有u->v 或者 v->u 或者u<>v 思路&#xff1a;首先将强连通分量通过tarjan算法求出来&#xff0c;然后进行缩点&#xff0c;也就是每一个缩点 所组成…

android开发蓝牙自动连接电脑上,Android蓝牙开发之自动连接设备

自动连接使用的是SharedPreferences这个来解决。private void Automaticconnection() {SharedPreferences sp getSharedPreferences("Dizhi", MODE_PRIVATE);String address sp.getString("address", "");if (!address.equals("")) …

hdu 2014鞍山赛区 5073 Galaxy

题意&#xff1a;就是给你 n 个数&#xff0c;代表n个星球的位置&#xff0c;每一个星球的重量都为 1 &#xff01; 开始的时候每一个星球都绕着质心转动&#xff0c;那么质心的位置就是所有的星球的位置之和 / 星球的个数 现在让你移动 k 个星球到任意位置&#xff08;多个星球…

android onitemclicklistener 参数,android – 对listview中的项使用setOnItemClickListener

大家好,有一个应用程序,可以在SD卡上保存音频.我创建了一个listview,它从sdcard中检索文件名.我正在尝试设置一个监听器,所以当单击文件名时,我可以启动另一个播放该文件的意图.当我尝试设置监听器并传入一个新的OnItemClickListener()时,eclipse是红色的下划线.我知道我必须实…

DRF之请求与响应

目录 一、模块与包回顾 二、反序列化校验源码分析(了解) 三、断言 四、drf之请求 【1】源码分析 【2】配置视图类能处理的编码格式 五、drf之响应 【1】源码 【2】响应编码格式 一、模块与包回顾 模块与包 什么是模块&#xff1f; 一个py文件&#xff0c;被别的py文件…

android 常用注解,Android 开发小工具之:注解 Annotation

Android Support 包之一的 support-annotations是通过静态编译检测来提高代码质量的一个注解工具。里面包含了 Android 开发中常用的代码检测注解&#xff0c;帮助开发者提高代码质量。通过 SDK Manager下载 Android Support Repository 后&#xff0c;在 Gradle 中通过如下声明…

codeforces B. Friends and Presents(二分+容斥)

题意&#xff1a;从1....v这些数中找到c1个数不能被x整除&#xff0c;c2个数不能被y整除&#xff01; 并且这c1个数和这c2个数没有相同的&#xff01;给定c1, c2, x, y&#xff0c; 求最小的v的值&#xff01; 思路&#xff1a; 二分容斥&#xff0c;二分找到v的值&#xff0c;…