Tokens on the Segments(第十届山东省ACM程序设计竞赛L题)优先队列

博客详细分析了第十届山东省ACM程序设计竞赛中L题的解决方案。题目要求在一系列线段上确保每个线段至少有一个点,通过将线段按左端点和长度排序,利用优先队列来找到最优策略,使得最多每条线段上有一个点。在实现过程中,优先队列起到了关键作用。
摘要由CSDN通过智能技术生成
Sample Input

2
3
1 2
1 1
2 3
3
1 2
1 1
2 2
Sample Output

3
2

题意:T组样例,n组数据,每组两个数a,b,(1<=i<=n)代表在y=i,a<=x<=b之间有一条线段,在整点可以放入值,问每条线段最少有一个点的最大数量是多少。

思路:按照左端点排序,然后按照长度排序,每次找长度最小的点,这样就保证了最多每一条线段上最少有一个点的情况。要用到优先队列,点击查看优先队列,然后定义一个L,如果不相等,ans++,L=ans,在减一放入队列里面。

#include <cstdio>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX=1e5;
struct A
{
    ll l,r;
    bool operator < (const A & a) const
    {
        if(l==a.l)
            return r>a.r;
        return l>a.l;
    }
}; //优先队列(按结构体中的l从小到大排序)
priority_queue <A> q;
int main()
{
    ll T,i,j,n;
    scanf("%lld",&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值