题目描述

小球球是个可爱的孩子,他喜欢玩具,另外小球球有个大大的柜子,里面放满了玩具,由于柜子太高了,每天小球球都会让妈妈从柜子上拿一些玩具放在地板上让小球球玩。 这天,小球球把所有的N辆玩具摆成一排放在地上,对于每辆玩具i,小球球都会给它涂上一个正整数value[i],以表示小球球对该玩具的喜爱程度,value[i]越小则表示他越喜爱。当然对于两辆不同的玩具u,v(u<>v),亦有可能value[i]=value[j],也就是说小球球对u,v两车的喜爱程度是一样的。 小球球很贪玩,他希望能从中间某个位置,连续的取出k辆玩具,使得这k辆车里喜爱程度最大的一辆车的喜爱程度正好等于k,且这k辆车中没有两辆车的喜爱程度是相同的。小球球希望知道k的最大值为多少。

输入

第一行一个整数N,表示小球球拥有的玩具数量。 接下来N行,每行一个整数,表示value[i]。

输出

一个整数k,即答案。

样例输入

6
2
4
1
3
2
1

样例输出

4


题解

单调栈

如果没有value互不相同的要求,那么就是单调栈傻*题,求出一个数左右第一个比它大的数的位置,根据这个区间判断是否有贡献。

那么加上了这个条件呢?其实也是一样的。我们在使用单调栈的同时,使用一个变量维护最后一个出现相同数字的位置,然后区间的交集即为所求区间。再判断贡献即可。

UPD:其实这个做法是错的,然而数据太水可以shi过(好像直接输出最大的value也能过?)

#include <cstdio>
#include <algorithm>
#define N 1000010
using namespace std;
int a[N] , sta[N] , top , last[N] , lp[N] , rp[N];
int main()
{
int n , i , now , ans = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]);
for(i = 1 , now = 0 ; i <= n ; i ++ )
{
while(top && a[i] > a[sta[top]]) top -- ;
now = max(now , last[a[i]]) , last[a[i]] = i;
lp[i] = max(sta[top] , now) , sta[++top] = i;
}
for(i = 1 ; i <= n ; i ++ ) last[a[i]] = n + 1;
for(i = n , now = sta[0] = n + 1 , top = 0 ; i ; i -- )
{
while(top && a[i] > a[sta[top]]) top -- ;
now = min(now , last[a[i]]) , last[a[i]] = i;
rp[i] = min(sta[top] , now) , sta[++top] = i;
}
for(i = 1 ; i <= n ; i ++ )
if(rp[i] - lp[i] > a[i])
ans = max(ans , a[i]);
printf("%d\n" , ans);
return 0;
}

最新文章

  1. 做一个java项目要经过那些正规的步骤
  2. JAVA_集合框架虐我千百遍,虐也是一种进步
  3. windows系统上安装与使用Android NDK r5 (转)
  4. paip.提升性能----java 无锁结构(CAS, Atomic, Threadlocal, volatile, 函数式编码, 不变对象)
  5. 【Beta阶段】团队源代码管理
  6. 自定义头文件 No such file or directory
  7. java:synchronized
  8. UOJ Round #8 赴京赶考 解题报告
  9. [转]Oracle Stored Procedures Hello World Examples
  10. netbeans环境中使用maven搭建jsf、primefaces工程
  11. [转载]tcp可靠性的好文
  12. [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】
  13. Android 有趣味的GridView
  14. 关于动态SQL中的NULL
  15. oracle 导入sql中文乱码(转)
  16. Stern-Brocot Tree
  17. Publisher和Subscriber节点
  18. [转帖]PG里面的Citus简介----找时间学习一下.
  19. vue 兼容IE报错解决方案
  20. 10 个理由让你继续干 IT

热门文章

  1. (转)在SQL Server 2016,Visual Studio 2017环境下,连接数据库屡屡失败,在connectionString上出的问题
  2. SAP Cloud for Customer客户主数据的重复检查-Levenshtein算法
  3. Android(java)学习笔记118:BroadcastReceiver之 外拨电话的广播接收者
  4. matlab启动
  5. python之道13
  6. 【转】Windows 邮件槽(MailSlot)
  7. 【转】如何在VC下检测当前存在的串口及串口热拔插
  8. Android读书笔记一
  9. windows server 服务器 环境配置
  10. PHP 日常开发过程中的bug集合(持续更新中。。。)