还记得lyf说过k=2的方法,但是推广到k是其他的话有点麻烦。现在这里采取另外一种方法。

  先将所有线段按照L进行排序,然后优先队列保存R的值,然后每次用最小的R值,和当前的L来维护答案即可。同时,如果Q的size()比k大,那么就弹出最小的R。

  具体见代码:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <set>
#include <vector>
#include <map>
#include <vector>
#include <queue>
using namespace std;
const int N = (int)3e5+; int n,k;
struct seg
{
int l, r, id;
bool operator < (const seg & A) const
{
return l < A.l;
}
}p[N]; int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) {scanf("%d%d",&p[i].l,&p[i].r);p[i].id=i;}
sort(p+,p++n);
priority_queue<int,vector<int>,greater<int> > Q;
int L = ;
int ans = ;
for(int i=;i<=n;i++)
{
Q.push(p[i].r);
if(Q.size() > k) Q.pop();
if(Q.size() == k && ans < Q.top() - p[i].l + )
{
ans = Q.top() - p[i].l + ;
L = p[i].l;
}
}
if(ans == )
{
puts("");
int first = ;
for(int i=;i<=k;i++)
{
if(first) printf(" ");
else first = ;
printf("%d",p[i].id);
}
puts("");
}
else
{
printf("%d\n",ans);
int first = ;
for(int i=;i<=n && k>;i++)
{
int l = p[i].l, r = p[i].r;
if(l<=L && L+ans-<=r)
{
if(first) printf(" ");
else first = ;
printf("%d",p[i].id);
k--;
}
}
puts("");
}
return ;
}

  另外,输出方案的方式也值得注意一下。

CodeForces 754D Fedor and coupons ——(k段线段最大交集)的更多相关文章

  1. codeforces 754D. Fedor and coupons

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

  2. 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 ...

  3. CodeForces 754D Fedor and coupons (优先队列)

    题意:给定n个优惠券,每张都有一定的优惠区间,然后要选k张,保证k张共同的优惠区间最大. 析:先把所有的优惠券按左端点排序,然后维护一个容量为k的优先队列,每次更新优先队列中的最小值,和当前的右端点, ...

  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. 求区间连续不超过K段的最大和--线段树+大量代码

    题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...

  7. D. Fedor and coupons 二分暴力

    http://codeforces.com/contest/754/problem/D 给出n条线段,选出k条,使得他们的公共部分长度最大. 公共部分的长度,可以二分出来,为val.那么怎么判断有k条 ...

  8. eduCF#61 C. Painting the Fence /// DP 选取k段能覆盖的格数

    题目大意: 给定n m 接下来给定m个在n范围内的段的左右端 l r 求选取m-2段 最多能覆盖多少格 #include <bits/stdc++.h> using namespace s ...

  9. 【codeforces 754D】Fedor and coupons

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

随机推荐

  1. 如果你的评论被WordPress的Akismet插件屏蔽,怎么解封?

    Akismet是Matt Mullenweg早期创办的一个项目,现在已经是Automattic公司的一个专注于剿杀垃圾评论的产品.在Wordpress用户中使用最多,z-blog也有用户在用,由于垃圾 ...

  2. Where is __dso_handle defined?

    Where is __dso_handle defined? 来源  https://stackoverflow.com/questions/34308720/where-is-dso-handle- ...

  3. spring AOP的相关术语

    连接点:Joinpoint   其实业务层接口的方法 切入点:Pointcut 被增强的是切入点,没被增强是永远都是连接点.连接点不一定是切入点,切入点一定是连接点 通知:Advice 就是指要增强的 ...

  4. Docker 部署mysql、tomcat笔记

    Docker 笔记整理 #.环境:Ubuntu 18.* #.安装 mysql 5.6.tomcat #.docker search mysql 报错:Error response from daem ...

  5. 转:idea类名出现了不同的颜色

    转:https://blog.csdn.net/yf_mood/article/details/88191818 在安装了git以后发现idea类名出现了不同的颜色,如下: 它们分别表示的含义: 绿色 ...

  6. 短信对接——一种jdbc链接运用

    package sms; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamRead ...

  7. go语言中获取变量类型的三种方法

    package main import ( "fmt" "reflect" ) func main() { var num float64 = 3.14 // ...

  8. 数据驱动——ddt

    1: pip3 install ddt 2: @ddt 装饰 @data((2,3),(4,5)) 支持列表,元祖,字典 @unpack 解压数据   1 import unittest 2 from ...

  9. 平衡搜索树-B树。

    B Tree 系列 摘录: https://blog.csdn.net/v_JULY_v/article/details/6530142 B+树介绍 B+树的几点介绍 动态查找树有: 二叉查找树,自平 ...

  10. Solr——Java应用

    Solr有一个客户端SolrJ 创建一个Java Project 引入Jar包 添加test类 package com.solr.test; import java.io.IOException; i ...