[POI 2018] Prawnicy

[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=5102

[算法]

首先,n条线段的交集一定是[Lmax,Rmin] , 其中,Lmax为最靠右的左端点,Rmin为最靠左的右端点

根据这个性质 , 我们不妨将所有线段按左端点为关键字排序 , 依次枚举最终交集的左端点 , 同时 , 我们还需维护一个小根堆 , 维护前k大的右端点 , 每次我们通过( 堆顶 - 当前枚举线段的左端点 )更新答案

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000010

struct segment
{
        int id;
        int l,r;
} a[MAXN];

int n,k,ans,l,r,len;
priority_queue< pair<int,int> > q;
int res[MAXN];

template <typename T> inline void read(T &x)
{
    int f = 1; x = 0;
    char c = getchar();
    for (; !isdigit(c); c = getchar()) if (c == ‘-‘) f = -f;
    for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - ‘0‘;
    x *= f;
}
inline bool cmp(segment a,segment b)
{
        if (a.l == b.l) return a.r > b.r;
        else return a.l < b.l;
}

int main()
{

        read(n); read(k);
        for (int i = 1; i <= n; i++)
        {
                a[i].id = i;
                read(a[i].l);
                read(a[i].r);
        }
        sort(a + 1,a + n + 1,cmp);
        ans = 0;
        for (int i = 1; i <= n; i++)
        {
                if ((int)q.size() < k)
                {
                        q.push(make_pair(-a[i].r,a[i].id));
                        if ((int)q.size() == k)
                        {
                                ans = max(ans,-q.top().first - a[i].l);
                                l = a[i].l; r = -q.top().first;
                                continue;
                        }
                } else
                {
                        if (a[i].r < -q.top().first) continue;
                        pair<int,int> tmp = q.top();
                        q.pop();
                        q.push(make_pair(-a[i].r,a[i].id));
                        if (-q.top().first - a[i].l > ans)
                        {
                                ans = -q.top().first - a[i].l;
                                l = a[i].l; r = -q.top().first;
                        }
                }
        }
        printf("%d\n",ans);
        if (ans == 0)
        {
                for (int i = 1; i <= k; i++)
                        printf("%d ",i);
                printf("\n");
                return 0;
        }
        for (int i = 1; i <= n; i++)
        {
                if (a[i].l <= l && a[i].r >= r)
                {
                        res[++len] = a[i].id;
                        if ((--k) == 0) break;
                }
        }
        for (int i = 1; i <= len; i++) printf("%d ",res[i]);
        printf("\n");

        return 0;

}

原文地址:https://www.cnblogs.com/evenbao/p/9538926.html

时间: 2024-08-01 17:26:40

[POI 2018] Prawnicy的相关文章

yd的拔钉子之路之 POI 2018

写在前面的一些话 好吧,钉子昨天刚刚更新了POI 2018的题目,于是目标转变了POI 2018其实是2017刷不动了 写写解题 Round I Pionek 什么极角排序......弃了 Plan metra 原文地址:https://www.cnblogs.com/ydnhaha/p/9860588.html

[POI 2018] Plan Metra

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5100 [算法] 首先分两类考虑 : 1. 1 -> N的路径不经过其它节点 , 我们只需判断(d1i - d2i)的绝对值是否全部相等 2. 1 -> N的路径经过了其它节点 , 那么显然 , 1 -> N这条链的长度为min{ d1i + d2i } , 所有d1i + d2i等于链长的节点都在链上 , 将其余节点的d1i和d2i作差 , 即可O(1)判断出这个节点是挂在

如何将C/C++程序转译成Delphi(十四)

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

世界著名设计小组nrg推荐的75个FLASH酷站

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

铺揭竟冒剐惹蒲掷咕堑接veld

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

支酸权我据好张近拉其深就率sJFlzqgrA

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

此每究具条如书中深花等业从次BaefoZ16

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

【原创】POI 生成Excel文件并下载

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</versio

POI Excel解析

Maven 引入POI <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId&g