题解/算法 {C. Goose Goose Duck}

题解/算法 {C. Goose Goose Duck}

@LINK: https://codeforces.com/gym/105184;

A[N]表示这N个人的区间;
比如答案是[a,b,c,d] 那么他一定满足: A[a].lef <= 0 <= A[a].rig, A[b].lef <= 1 <= A[b].rig, A[c].lef <= 2 <= A[c].rig, …

贪心;
对于最开头的人来说, 令集合S: 满足A[].lef <= 0的区间, 那么我们要选择一个 满足A[].rig >= 0前提下的 最小的A[].rig, 比如说S: [0,0] , [0,1], [0,2] 那么我们选择[0,0], 因为他们都可以放到当前位置 而[0,1], [0,2]他们的rig更大 意味着 后面的位置也可以选择他们 即他们的选择性更大, 我们在当前位置 选择一个选择性最小(即最差)的方案;
更一般的说, 对于当前位置ind (即此时[0,1,2,...,ind-1]这些位置 已经排列好了), 我们要选择一个区间 满足A[].lef <= ind <= A[].rig, 令集合S: 满足A[].lef <= ind的区间, 这些区间里 我们再根据A[].rig从小到大排序 选择一个满足A[].rig >= ind且最小的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值