题意:给定n个优惠券,每张都有一定的优惠区间,然后要选k张,保证k张共同的优惠区间最大。

析:先把所有的优惠券按左端点排序,然后维护一个容量为k的优先队列,每次更新优先队列中的最小值,和当前的右端点,

之间的距离。优先队列只要存储右端点就好。

代码如下:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <cmath>
#include <stack>
#include <sstream>
#include <unordered_map>
#include <unordered_set>
#define debug() puts("++++");
#define freopenr freopen("in.txt", "r", stdin)
#define freopenw freopen("out.txt", "w", stdout)
using namespace std; typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const LL LNF = 1LL << 60;
const double inf = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 3e5 + 5;
const int mod = 2000;
const int dr[] = {-1, 1, 0, 0};
const int dc[] = {0, 0, 1, -1};
const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
int n, m;
const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inline bool is_in(int r, int c){
return r >= 0 && r < n && c >= 0 && c < m;
}
struct Node{
int l, r, id;
bool operator < (const Node &p) const{
return l < p.l;
}
};
Node a[maxn]; int main(){
while(scanf("%d %d", &n, &m) == 2){
for(int i = 0; i < n; ++i){
scanf("%d %d", &a[i].l, &a[i].r);
a[i].id = i + 1;
}
sort(a, a + n);
priority_queue<int, vector<int>, greater<int> >pq;
int ans = 0;
int t = 0;
for(int i = 0; i < n; ++i){
pq.push(a[i].r);
if(pq.size() > m) pq.pop();
int tmp = pq.top() - a[i].l + 1;
if(pq.size() == m && ans < tmp){
ans = tmp;
t = a[i].l;
}
} printf("%d\n", ans);
if(!ans){
printf("1");
for(int i = 2; i <= m; ++i) printf(" %d", i);
continue;
}
else{
int cnt = 0;
for(int i = 0; i < n && m; ++i) if(a[i].l <= t && a[i].r >= t + ans - 1){
if(cnt) putchar(' ');
printf("%d", a[i].id);
--m;
++cnt;
}
}
printf("\n");
}
return 0;
}

CodeForces 754D Fedor and coupons (优先队列)的更多相关文章

  1. CodeForces 754D Fedor and coupons&&CodeForces 822C Hacker, pack your bags!

    D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  2. codeforces 754D. Fedor and coupons

    D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  3. CodeForces 754D Fedor and coupons ——(k段线段最大交集)

    还记得lyf说过k=2的方法,但是推广到k是其他的话有点麻烦.现在这里采取另外一种方法. 先将所有线段按照L进行排序,然后优先队列保存R的值,然后每次用最小的R值,和当前的L来维护答案即可.同时,如果 ...

  4. Codeforces 390Div2-754D. Fedor and coupons(贪心+优先队列)

    D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  5. cf754 754D - Fedor and coupons

    2个多小时,弱智了..(连A都做不对,就不要做D了(迷)) #include<bits/stdc++.h> #define lowbit(x) x&(-x) #define LL ...

  6. Codeforces I. Producing Snow(优先队列)

    题目描述: C. Producing Snow time limit per test 1 second memory limit per test 256 megabytes input stand ...

  7. 【codeforces 754D】Fedor and coupons

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. Codeforces Round #390 (Div. 2) D. Fedor and coupons(区间最大交集+优先队列)

    http://codeforces.com/contest/754/problem/D 题意: 给定几组区间,找k组区间,使得它们的公共交集最大. 思路: 在k组区间中,它们的公共交集=k组区间中右端 ...

  9. Codeforces Round #390 (Div. 2) D. Fedor and coupons

    题意:题目简化了就是要给你n个区间,然后让你选出k个区间  使得这k个区间有公共交集:问这个公共交集最大能是多少,并且输出所选的k个区间.如果有多组答案,则输出任意一种.   这题是用优先队列来处理区 ...

随机推荐

  1. 如何给grldr.mbr和grldr改名

    grldr修改方法: 比如要把grldr 改成gzldr :1.先把文件名改成gzldr:2.用ultraedit或winhex打开gzldr:3.虽然文本框全都是乱码,别管它,把光标定位在右边文本框 ...

  2. 字段为空sql语句,设置当前模式

    delete from t_corpinfo  where CORPID='' and CORPNAME=''  该命令是删除字段为空的记录 SET CURRENT SCHEMA DB2INST1;

  3. 函数FindFirstFile

    文件查找 Struct Lnode{ Char table[256];         //保存文件夹名 Struct Lnode*next; } 加文件夹入链表 Lnode *newList; Vo ...

  4. UIRoot

    scalingStyle: Flexible:固定大小,不管设备屏幕的大小是多少,都以固定的像素显示UI Constrained: 可适应屏幕 如要使640*480像素的背景图适应屏幕,要如下设置 c ...

  5. Issue 5158: Modal dialog present (UnexpectedAlertOpen) issue in IE (Similar issue like 3360)

    https://code.google.com/p/selenium/issues/detail?id=5158   Reported by mailtopa...@gmail.com, Feb 13 ...

  6. android:editable is deprecated: Use an <EditText> to make it editable

    问题:android:editable is deprecated: Use an to make it editable   意思:Android的:编辑是反对:使用<</span> ...

  7. 极光推送,极光IM使用指南(AndroidStudio)

    到官网创建一个应用,然后下载上面的例子程序,对照集成文档,把libs里的jar和so文件放入到本项目的libs下面,记得把jar要as a library,然后配置清单文件,对照着Demo来,配置好之 ...

  8. Redis SAVE 命令 返回 ERR

    今天使用redis-cli客户端中执行SAVE命令返回 (error) ERR Baidu找不到答案,去Google找一下 应该是redis-server服务没有root权限 然后sudo kill ...

  9. Linux查看文件最后几行的命令,日志的福音啊

    tail -n 20 filename说明:显示filename最后20行

  10. 用CSS让文字居于div的底部

    css对文字的布局上没有靠容器底部对齐的参数,目前使用的一个不错的方法也比较好.就是用position属性来解决,看下面的代码,用position的相对和绝对定位功能也轻松的实现了,文字靠近div低部 ...