Description

白克喜欢找一个序列中的次大值。对于一个所有数字都不同的序列 x1, x2, …, xk (k > 1) ,他的次大值是最大的 xj ,并且满足 xj ≠maxki=1 xi

对于一个所有数字都不同的序列 x1, x2, …, xk (k > 1) ,他的幸运数字是最大值和次大值的异或值(Xor)。

现在有一个序列 s1, s2, …, sn (n > 1) 。 s[l,r] 表示子段 sl, sl+1, …, sr 。你的任务是找出所有子段的最大幸运数字。

注意,序列s中的所有数字都是不同的。

题解

单调栈的简单应用。考虑枚举一个数,使它成为某一个区间的次大值,如果这个区间的最大值在次大值的左边,考虑从左往右枚举,如果一个数后面已经有一个数比它大了,那么它就没有用了,所以可以维护一个单调降的栈,这样,没个数入栈后它前面的数就是这个区间的最大值,直接更新答案。最后不要忘记还要从右往左刷一次。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100006
#define LL long long
using namespace std;
inline char nc(){static char buf[100000],*i=buf,*j=buf;return i==j&&(j=(i=buf)+fread(buf,1,100000,stdin),i==j)?EOF:*i++;
}
inline int _read(){char ch=nc();int sum=0;while(!(ch>='0'&&ch<='9'))ch=nc();while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();return sum;
}
int n,ans,top,a[maxn],stack[maxn];
void push(int x){while(top&&stack[top]<x)top--;stack[++top]=x;
}
int main(){freopen("two.in","r",stdin);freopen("two.out","w",stdout);n=_read();for(int i=1;i<=n;i++)a[i]=_read();for(int i=1;i<=n;i++){push(a[i]);if(top>1)ans=max(ans,a[i]^stack[top-1]);}top=0;for(int i=n;i>=1;i--){push(a[i]);if(top>1)ans=max(ans,a[i]^stack[top-1]);}printf("%d\n",ans);return 0;
}

51nod 1423 最大“二货”【单调栈】相关推荐

  1. 51nod 1423 最大二“货” 单调栈

    利用单调栈,高效求出每个区间内的最大值和次大值的亦或值. 先正向扫描,利用单调递减栈,若当前栈为空栈,则直接压入栈中,若为非空栈,弹出栈顶元素,每弹出一个元素,则求一次亦或值,保留最大值 接着进行反向 ...

  2. 51nod-1423 最大二“货”(单调栈)

    原题链接 1423 最大二"货" 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 白克喜欢找一 ...

  3. 51nod1423 最大二“货”

    题面在这里 我们维护一个单调递减的栈,然后发现每次一个数进栈的时候,那些弹出栈的数都对应某一个区间的次大值(最大值就是要进栈的数),所以我们每次弹栈的时候更新一下答案就好了. 然后这个只是次大值在最大 ...

  4. 51nod 1423:最大二“货”

    1423 最大二"货" 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  取消关注 白克喜欢找一个序列 ...

  5. 直方图中最大的矩形(遍历与单调栈)

    给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [ ...

  6. 单调队列 Monotonic Queue / 单调栈 Monotonic Stack

    2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...

  7. 单调栈 leetcode整理(三)

    目录 42. 接雨水 思路分析 901. 股票价格跨度 思路 581. 最短无序连续子数组 思路一:排序+双指针 思路二:单调栈 思路三:双指针(最省时) 42. 接雨水 42. 接雨水 给定 n 个 ...

  8. 【LeetCode笔记】84. 柱状图中最大的矩形(字符串、单调栈)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 和接雨水有点像,但是具体做法还是有点不同. 思路 && 代码 暴力法只能过 94 / 96 的样例:复杂度O(n^ ...

  9. LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划

    LeetCode #121 买卖股票的最佳时机 题目描述 给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算 ...

最新文章

  1. Python开发基础总结之套接字+字符串+正则表达式
  2. css :hover
  3. 波士顿动力副总给我写了一封信,在我莫名膨胀之后
  4. linux man手册_读书笔记:Linux命令行与shell脚本编程大全 第一章~第五章
  5. 还原数据库出现“因为数据库正在使用,所以无法获得对数据库的独占访问权”解决方法-
  6. PW Live直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
  7. Android 数据访问之SharedPreference demo+笔记
  8. 蓝讯数卡api接口,可以接通25家话费充值卡、游戏点卡官方通道,轻松完成客户快速消耗...
  9. 找回WordPress登录密码的方法
  10. cplex入门系列(二)--- 线性规划求解
  11. 利用python构建马科维茨_如何用python实现Markowitz投资组合优化
  12. Ubuntu搭建FTP服务器后用filezella连接报错
  13. 【ESP32-IDF】04-2 存储-NVS
  14. 学计算机英语的心得体会,英语学习心得体会
  15. 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码
  16. 10月书讯(下)| 双节同庆,读书正当时
  17. Unreal Engin_画廊制作笔记_001<设计草图,利用BSP快速搭建简单场景>
  18. JAVA笔记---------字符串基础与操作
  19. el-table操作显示图标,鼠标移入显示弹窗
  20. 国内头部游戏本地化服务商 安睿杰本地化翻译

热门文章

  1. 银行数字化转型导师坚鹏:浙江浙商金控公司培训圆满结束
  2. 关键字const的使用总结
  3. 金田新材冲刺上交所:拟募资15.6亿 方文彬家族控制62%股权
  4. 大学计算机人工智能知识点,人工智能及其应用知识点整理
  5. css前端日记之盒子模型-----一起去未来
  6. 雷库兹韦尔量子计算机,人物 | 他说,再挺11年,送你长生不老,要不要?
  7. win7交换机共享宽带连接上网
  8. EKL日志分析平台-kibana数据可视化
  9. 怎么画动漫人物的五官:耳鼻眼嘴
  10. signature=c751019741e6bb1ccbac4e13ac0b26c4,James Boswell