题目名称 | 1212. [NOIP 2010冲刺十二]奶牛排队 |
---|---|
输入输出 | tahort.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | sywgz 于2012-10-23加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:164, 提交:574, 通过率:28.57% | ||||
小DOTA | 100 | 0.039 s | 10.23 MiB | C++ |
rewine | 100 | 0.068 s | 1.08 MiB | C++ |
面对疾风吧 疾风 疾风吧 | 100 | 0.071 s | 1.87 MiB | C++ |
Hyoi_iostream | 100 | 0.073 s | 0.75 MiB | C++ |
Youngsc | 100 | 0.083 s | 1.84 MiB | C++ |
MloVtry | 100 | 0.085 s | 1.46 MiB | C++ |
pedro6521 | 100 | 0.091 s | 0.79 MiB | C++ |
Samle | 100 | 0.103 s | 1.31 MiB | C++ |
Pine | 100 | 0.109 s | 0.70 MiB | C++ |
MloVtry | 100 | 0.114 s | 1.46 MiB | C++ |
本题关联比赛 | |||
20121023 | |||
20240913练习 |
关于 奶牛排队 的近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$ 的情况就行了 可以参考标程理解一下 | ||||
| ||||
奇迹暴力
| ||||
| ||||
答案可能是0,2,但不会是1!
请务必特判...
小e
2016-08-13 17:40
15楼
| ||||
题解里面根据解法三写的标程写出来了QwQ , 题解看不懂的戳这里
| ||||
答案可能是0,2,但不会是1 ans是1要特判·-·
安呐一条小咸鱼。
2016-08-13 06:29
13楼
| ||||
steak
2016-02-03 22:39
12楼
| ||||
我的代码只有70分,但是不知道哪里错了。
这是我的思路: 先从左往右标记最低点(红色),然后枚举找最高点(绿色),当枚举到最高点(绿色)时候更新与最近最低点(红色)的距离。 我举了很多例子,但是似乎都是正确的,奇怪。
KEVI_
2016-02-03 20:47
11楼
| ||||
在本地测会Runtime Error,提交就不会= =
本地递归次数太多好像爆栈了。。 蒟蒻不会单调队列。。就写个dfs看看吧 |
奶牛在熊大妈的带领下排成了一条直队。
显然,不同的奶牛身高不一定相同……
现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛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头奶牛,满足条件且为最多。