题目名称 1212. [NOIP 2010冲刺十二]奶牛排队
输入输出 tahort.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarsywgz 于2012-10-23加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:162, 提交:572, 通过率:28.32%
Gravatar小DOTA 100 0.039 s 10.23 MiB C++
Gravatarrewine 100 0.068 s 1.08 MiB C++
Gravatar面对疾风吧 疾风 疾风吧 100 0.071 s 1.87 MiB C++
GravatarHyoi_iostream 100 0.073 s 0.75 MiB C++
GravatarYoungsc 100 0.083 s 1.84 MiB C++
GravatarMloVtry 100 0.085 s 1.46 MiB C++
Gravatarpedro6521 100 0.091 s 0.79 MiB C++
GravatarSamle 100 0.103 s 1.31 MiB C++
GravatarPine 100 0.109 s 0.70 MiB C++
GravatarMloVtry 100 0.114 s 1.46 MiB C++
本题关联比赛
20121023
关于 奶牛排队 的近10条评论(全部评论)
想到了严格 $O(n\log(n))$ 的解法:
首先我们用单调栈或者 $\text{std::set}$ 预处理出每个值 $a_l$ 右边第一个不大于它的值 $a_r$ 的位置, 这样的话区间 $(l,r)$ 就是以 $l$ 为左端点的合法区间的右端点的可能位置.
然后我们根据 $r$ 的大小升序排序, 同时使用一个树状数组维护 $a_i$ 后大于前面所有点的点值 $a_r$ 与位置 $r$ (若点值相等取下标更小的), 将点逐个加入树状数组, 在加入到某个 $(l,r)$ 的 $r-1$ 的位置的时候就可以查询 $l$ 得到最大的右端点.
总时间复杂度中, 预处理是 $O(n)$ 或者 $O(n\log(n))$ 的, 最后树状数组中每个点都至少要插入/查询一次, 树状数组部分总时间复杂度 $O(n\log(n))$, 整个程序时间复杂度为 $O(n\log(n))$.
最后注意特判 $ans=0$ 的情况就行了
可以参考标程理解一下
Gravatarrvalue
2018-02-28 07:13 19楼
GravatarAntiLeaf
2017-05-25 16:11 18楼
奇迹暴力
GravatarSmile
2016-10-25 18:31 17楼
Gravatar残星誓言
2016-10-24 19:50 16楼
答案可能是0,2,但不会是1!
请务必特判...
Gravatar小e
2016-08-13 17:40 15楼
题解里面根据解法三写的标程写出来了QwQ , 题解看不懂的戳这里
Gravatar安呐一条小咸鱼。
2016-08-13 17:06 14楼
答案可能是0,2,但不会是1 ans是1要特判·-·
Gravatar安呐一条小咸鱼。
2016-08-13 06:29 13楼
回复 @KEVI_ :
6
1 9 2 3 4 5
Gravatarsteak
2016-02-03 22:39 12楼
我的代码只有70分,但是不知道哪里错了。
这是我的思路:
先从左往右标记最低点(红色),然后枚举找最高点(绿色),当枚举到最高点(绿色)时候更新与最近最低点(红色)的距离。

我举了很多例子,但是似乎都是正确的,奇怪。
GravatarKEVI_
2016-02-03 20:47 11楼
在本地测会Runtime Error,提交就不会= =
本地递归次数太多好像爆栈了。。
蒟蒻不会单调队列。。就写个dfs看看吧
GravatarHouJikan
2014-09-26 15:09 10楼

1212. [NOIP 2010冲刺十二]奶牛排队

★★   输入文件:tahort.in   输出文件:tahort.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

奶牛在熊大妈的带领下排成了一条直队。  

显然,不同的奶牛身高不一定相同……

现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的B是最高的,且B高于A奶牛,中间如果存在奶牛,则身高不能和A、B奶牛相同。问这样的奶牛最多会有多少头?

从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是0,2,但不会是1)。

【输入格式】

第一行一个数N (2≤N≤100000),表示奶牛的头数。

接下来N个数,每行一个数,从上到下表示从左到右奶牛的身高(1≤身高= maxlongint)。

【输出格式】

一行,表示最多奶牛数。

【样例输入】

5
1
2
3
4
1

【样例输出】

4

【提示】

样例解析,取第1头到第4头奶牛,满足条件且为最多。