「BZOJ2811」[Apio2012] Guard

2015年4月24日7,26112

Description

Input

Output

Sample Input

5 3 4
1 2 1
3 4 1
4 4 0
4 5 1

Sample Output

3
5

HINT

在这个样例中,有两种可能的安排方式:1,3,5 或者 2,3,5。即 3 和 5
后面必然躲着一个忍者。
考虑第一个灌木丛,存在一种安排方案使得它的后面躲着忍者,但也存在一
种安排方案使得它后面没有躲忍者,因此不应该输出 1。同理,不应该输出 2。

题解

首先先将0的区间去除,可以用线段树T T

如果去除0剩下的坐标编号等于忍者数,则所有剩下的坐标都要放忍者

重标号后再将有包含其他区间的区间去除

贪心求出F[i]表示前i个区间的最少要放的忍者数(从左到右没有忍者的区间在右端点放一个),G[i]表示后i个区间。。。

然后依次考虑每个区间,如果它的右端点x需要放一个忍者,考虑能否在x-1放

二分出覆盖x的区间范围l-r

若F[l-1]+G[r+1]+1>K则x一定要放忍者

 

avatar
5 Comment threads
7 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
hzwer233333伟安生不解机liuyunhui246Gcjh Recent comment authors
  Subscribe  
提醒
233333
233333

代码是错的。国际数据就会挂

彳亍者 无疆
彳亍者 无疆

是不是因为楼下说的那个问题哦QAQ

伟安生不解机
伟安生不解机

可以解释一下95行x=qr[i]-1而不是x=qr[i]的原因吗?

Gcjh

top为什么要 > 1, top != 0 应该就可以了吧

liuyunhui246
liuyunhui246

恩恩。top>1就会有些数据过不了QAQ

Gcjh

好像一组数据卡掉了
10 1 5
6 8 0
5 6 1
4 6 1
3 9 1
7 7 0

罗崚骁

其实预处理可以不用线段树……可以用类似于差分数组的方法……线性时间内就可以算出来而且代码挺短……

陆葳蕤
陆葳蕤

%%%%%%%%%%%%%%%%%%%

罗崚骁

傻叉

陆葳蕤
陆葳蕤

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

De℃,.: )
De℃,.: )

%lwr。。。