2018.11.02 NOIP训练 停车场(线段树)

传送门
这是一道困饶了我一年的题。
其实就是去年去NOIP提高组试水的时候考的模拟题
但当时我水平不够,跟 y k yk yk一起杠了一个下午都没调出来。
今天终于 A A A了。
其实就是一个维护最长连续 01 01 01串的变形。
分几种情况讨论下就行。
我们令最长子段的左右端点为 l , r l,r l,r

  1. l = 1 l=1 l=1,直接停在 1 1 1号点。
  2. r = n r=n r=n,直接停在 n n n号点。
  3. 最长子段在中间,根据题目的定义,这个时候根据题目定义它的到两边的长度应该是 r − l + 2 2 \frac {r-l+2} 2 2rl+2,而从令左端开始的连续 0 0 0长度为 L L L,右端开始的为 R R R,它们到附近第一辆车的长度为 L , R L,R L,R,因此我们需要比一比这三个亮的大小,这还没完,如果是 r − l + 2 2 \frac{r-l+2} 2 2rl+2最大的话,我们需要寻找左端点下标最小且长度为 r − l + 1 r-l+1 rl+1的一个区间,然后令其中点成为答案,因为虽然 l e n [ 3 , 3 ] < l e n [ 5 , 6 ] len[3,3]<len[5,6] len[3,3]<len[5,6],但它们距离最近一辆车的长度是相同的,因此要选 3 3 3而不是 5 5 5

代码

你可能感兴趣的:(#,线段树)