题意:给你一个数m,有多少优惠券,给个n,主角想用多少优惠券。然后接下来时m行,每行两个数,那张优惠券的优惠区间a,b(在a号货物到b号货物之间的所有都可以优惠)

问你,能不能用k张优惠券,是他的优惠区间重叠的部分最大。

今天第一次看优先队列,居然还有这么神奇的东西,omg,太强了

思路就是排序,然后用优先队列乱搞一下。。。

接下来给出代码

  1. #include <iostream>
  2. #include <queue>
  3. #include <algorithm>
  4. #include <stdio.h>
  5. using namespace std;
  6.  
  7. const int Maxn = 2147483647;
  8.  
  9. struct Node{
  10. int l,r;
  11. int i;
  12. }node[300010];
  13.  
  14. bool cmp( const Node &a,const Node &b ){
  15. return ( a.l == b.l ? a.r < b.r:a.l < b.l );
  16. }
  17.  
  18. int main(){
  19. int m,n;
  20. scanf("%d%d",&m,&n);
  21. for( int i = 1; i <= m; i++ ){
  22. scanf("%d%d",&node[i].l,&node[i].r);
  23. node[i].i = i;
  24. }
  25. sort( node+1,node+1+m,cmp );
  26. priority_queue<int,vector<int>,greater<int> > q;
  27. int inf = -Maxn;
  28. int x;
  29. int l,r;
  30. for( int i = 1; i <= m; i++ ){
  31. x = node[i].l;
  32. q.push( node[i].r );
  33. while( q.top() < x || q.size() > n ){
  34. q.pop();
  35. }
  36. if( q.size() == n ){
  37. if( inf < q.top() - x + 1 ){
  38. inf = q.top() - x + 1;
  39. l = x,r = q.top();
  40. }
  41. }
  42. }
  43. if( inf == - Maxn ){
  44. cout << '0' << endl;
  45. for( int i = 1; i <= n; i++ ){
  46. printf( "%d ",i );
  47. }
  48. printf( "\n" );
  49. exit(0);
  50. }else{
  51. cout << inf << endl;
  52. for( int i = 1; i <= m; i++ ){
  53. if( node[i].l <= l && node[i].r >= r ){
  54. printf("%d ",node[i].i);
  55. n--;
  56. if( n == 0 ){
  57. cout << '\n';
  58. exit(0);
  59. }
  60. }
  61. }
  62. }
  63. }

cf754D的更多相关文章

随机推荐

  1. jquery右下角返回顶部

    实现的效果也就是,当有滚动条是,滚动条未动或与顶部距离小于多少像素是,返回顶部按钮处于隐身状态,当滚动条与顶部距离大于一定像素时,返回顶部按钮出现,实现点击‘返回按钮’后,从当前位置回到等不位置.要先 ...

  2. PHPUnit初试

    先测试了一下加减,检查一下环境,又调用函数测试了服务器名. 源代码: class DemoController extends \Think\Controller { /** * @assert (5 ...

  3. 黑马程序员-------.net基础知识一

    一 初识.net  .net是一种多语言的编程平台,可以用多达几十种的语言来进行开发,而C#就是基于.net平台的其中一种开发语言. 它的特点是: ⒈多平台:该系统可以在广泛的计算机上运行,包括从服务 ...

  4. Morgan stanley 电话面试

    首先是聊项目, 不会涉及到具体的技术问题 1.C和C++的区别:C++里的RTTI 2.vector 和 list的区别 : casting operator ; smart pointer. 3.数 ...

  5. win7系统cocos2dx 3.4 绑定自定义类到Lua

    Cocos2d-x 3.0开始使用bindings-generator来生成c++类的lua绑定.bindings-generator基于tolua++,通过配置tools/tolua中的ini文件以 ...

  6. the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header

    the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header ...

  7. OA学习笔记-009-岗位管理的CRUD

    一.分析 Action->Service->Dao CRUD有功能已经抽取到BaseDaoImpl中实现,所以RoleDaoImpl没有CRUD的代码,直接从BaseDaoImpl中继承 ...

  8. 《ruby编程语言》笔记 1

    赋值: ruby支持并行赋值,即允许在赋值表达式中出现多余一个值和多于一个的变量: x,y=1,2a,b=b,ax,y,z=[1,2,3] (python同样可以正常上面的语句). Methods i ...

  9. android 世界各国英文简写代码 资源文件

    今日又用到这段代码,忽然感觉到如果是第一次用的人肯定也会很麻烦.故在此上传一份.后人再用就不必重复做此工作.跟体育老师学过语文,见谅. 提供下载地址 http://download.csdn.net/ ...

  10. 子查询解嵌套not in 无法展开改写

    SQL> explain plan for select * from OPS$CZTEST1.SAVJ_ATOMJOURBAK where ((list_flag = '1' and prt_ ...