cf754D
题意:给你一个数m,有多少优惠券,给个n,主角想用多少优惠券。然后接下来时m行,每行两个数,那张优惠券的优惠区间a,b(在a号货物到b号货物之间的所有都可以优惠)
问你,能不能用k张优惠券,是他的优惠区间重叠的部分最大。
今天第一次看优先队列,居然还有这么神奇的东西,omg,太强了
思路就是排序,然后用优先队列乱搞一下。。。
接下来给出代码
#include <iostream> #include <queue> #include <algorithm> #include <stdio.h> using namespace std; const int Maxn = 2147483647; struct Node{ int l,r; int i; }node[300010]; bool cmp( const Node &a,const Node &b ){ return ( a.l == b.l ? a.r < b.r:a.l < b.l ); } int main(){ int m,n; scanf("%d%d",&m,&n); for( int i = 1; i <= m; i++ ){ scanf("%d%d",&node[i].l,&node[i].r); node[i].i = i; } sort( node+1,node+1+m,cmp ); priority_queue<int,vector<int>,greater<int> > q; int inf = -Maxn; int x; int l,r; for( int i = 1; i <= m; i++ ){ x = node[i].l; q.push( node[i].r ); while( q.top() < x || q.size() > n ){ q.pop(); } if( q.size() == n ){ if( inf < q.top() - x + 1 ){ inf = q.top() - x + 1; l = x,r = q.top(); } } } if( inf == - Maxn ){ cout << '0' << endl; for( int i = 1; i <= n; i++ ){ printf( "%d ",i ); } printf( "\n" ); exit(0); }else{ cout << inf << endl; for( int i = 1; i <= m; i++ ){ if( node[i].l <= l && node[i].r >= r ){ printf("%d ",node[i].i); n--; if( n == 0 ){ cout << '\n'; exit(0); } } } } }
cf754D的更多相关文章
随机推荐
- 计划任务实现定时备份mysql数据库
1.linux平台 30 3 * * * sh /data/tools/mysqlbackup.sh 每天3点半备份数据库mysqlbackup.sh(备份最近5天的数据): #设置数据库名,数据库 ...
- 已经安装php后,再增加扩展模块(不重新编辑php)
下面以安装curl为例,介绍具体安装步骤. 1.安装crul wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7 ...
- POJ 2406 Power Strings 1961的简化版,kmp的next数组的应用
题目: http://poj.org/problem?id=2406 跟1961差不多,题解就不写了,一开始理解错题了,导致WA一次. #include <stdio.h> #includ ...
- .Net Framework Data Provider可能没有安装
方法一.下载SQL Server Compact 4.0 安装后就可以解决.下载地址是: http://www.microsoft.com/downloads/zh-cn/details.aspx?f ...
- C++中二维数组的动态创建与处理
C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数.采用这种格式,列数必须指出,而行数无需指 ...
- Ubuntu 安装 JDK 7 / JDK8 的两种方式
ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用pp ...
- 不用第三个变量,将a,b两个值互换,会出现什么样的异常?
1 相互加减 a = a + b; b = a - b; a = a - b; 但会出现异常 如果a+b超过a类型的范围,俗称溢出异常. 2 指针操作交换地址 3 异或操作 转自网络搜索的答案
- 第 10 章 建造者模式【Builder Pattern】
以下内容出自:<<24种设计模式介绍与6大设计原则>> 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我“牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的 ...
- POP3、SMTP、IMAP和Exchange的区别在哪里?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:永遇乐链接:http://www.zhihu.com/question/24605584/answer/29039357来源: ...
- 最简单的CRC32源码-逐BYTE法
从按BIT计算转到按BYTE计算,要利用异或的一个性质,具体见前面的文章<再探CRC >. 其实方法跟逐BIT法是一样的,我们只是利用异或的性质,把数据分成一BYTE一BYTE来计算,一B ...