【pku3657】二分答案+区间染色

最近有点懒,很久没写总结了,估计今天相当差的状态跟这有关吧(向总笑而不语)

好了,废话不多说,还是随便记记最近做的的题目吧

 

pku 3657:

  很有意思的题,大意是给你若干句形如a,b,c的描述,表示a~b的最小值为c,要你求第一句出现矛盾的话。

  乍一看没什么好想法,模拟吧,不可能,线段树吧,判不出,怎么办?回过头想想,为什么麻烦了,麻烦在了哪里,依我看,就是麻烦在了"求第一句出现矛盾的话"上,"第一句"会卡死了我们的思路,怎么解决呢?二分答案!二分的性质很显然,解会是连续的,而且二分答案之后就可以排序了,此为此题收获之一,二分答案以获得更多信息和更宽松的条件

  好了,排完序之后容易想到按c从大到小排序,有如下两种情况可能产生矛盾:如果一段区间的最小值已知为c1了,那么<c1的值在这段区间上是不可能出现的了,就相当于拿到值为ci的一堆区间时(注意,可能不止一个),对整段区间中没有颜色的点染上ci的颜色(哦,不记得说了,先给区间离散化一下),如果最后发现这一段没染到一个,那么就矛盾了;题目有要求任意两个仓库的存量不能相同,也就是说,对于值同为ci的区间,如果它们的并不是一个整区间的话,显然会出现矛盾(ci的存量要出现在多个地方)。此为此题收获之二,细致的读题是ac的必要条件。。第二种情况我自己就没有想到。。

  这个染色的过程用什么东西来实现?线段树?麻烦。模拟?。。不予评价。这都不是最佳选择。由于每个点只能被染色一次,那么并查集就能够胜任这个过程了。具体方法就是每个点的f[i]记录当前它被一整段区间所覆盖的最左边那个点,这样,每次给区间染色就可以用并查集做到均摊O(alpha(n))的了。并查集的妙用,此为此题收获之三

  看这个神奇的数据

  10 3
  1 10 1
  1 1 5
  10 10 4

  输出3的同学要注意了,普通的离散化不能区分[a,a]U[b,b]和[a,b],那么我们离散化的时候往[a,b](a+1<b)中插一个点就可以了。离散化时的细节(好像离散化经常要插点啊什么的),此为此题收获之四

 

代码:

 

  并不难的一道题,收获超乎想象。。顺便膜拜下fanhq神牛。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值