poj1201(二分+线段树)或(差分约束系统)

博客详细介绍了如何解决poj1201问题,提供了两种解法。解法一是通过将区间按右端点排序,使用线段树和二分查找优化,实现nlognlogn的复杂度。解法二是建立差分约束系统,将每个数轴前缀的1数量转换为点,通过边的设置求最长路径。
摘要由CSDN通过智能技术生成

题意:数轴上每个位置为0或是1,给n(1 <= n <= 50000)个区间[ai, bi],每个区间内至少有 ci 个1.0 <= ai <= bi <= 50000,1 <= ci <= bi - ai+1问数轴上至少有多少个1可以满足要求。


解法1:现将区间按右端点排序,然后每个区间内的点尽量往右边放,这样子可以照顾到以后的。在找每个区间的放法时,线段树查询区间1的个数,二分查找要放的后缀位置,然后将整个区间后缀全部涂上1.总复杂度是nlognlogn。网上没找到有人这么做的,但确实可以。


解法2: 将每个数轴的前缀的1的数量当做一个点。然后[ai,bi]之间有ci个点,就是点ai-1到点bi有个ci的边。然后每个位置最少0个1,最多1个1.所以ai 到 ai+1有个0长度的边,ai+1到ai有个-1长度的边。    然后就是求左端点到右端点的最长路了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值