51Nod-1423-最大二"货"
来源:互联网 发布:网络推广中介怎么样 编辑:程序博客网 时间:2024/05/17 07:14
ACM模版
描述
题解
正反向单调递减栈搞一遍即可。
因为在单调递减栈的求解过程中,每一次 push 值时都保证 push 前的 top 值大于要 push 的值,并且中间所有的数小于要 push 的值和 push 前的 top 值,所以呢,这两个值刚刚是该区间的最大和次大值,异或求最即可,当然还要反向搞一下,依然是递减栈。
这里再说一点,如果是单调递增栈的话,那么这两个值就是最小和次小值,不错的性质哦……
代码
#include <iostream>#include <cstdio>#include <stack>using namespace std;const int MAXN = 1e5 + 10;int n;int val[MAXN];stack<int> si;template <class T>inline void scan_d(T &ret){ char c; ret = 0; while ((c = getchar()) < '0' || c > '9'); while (c >= '0' && c <= '9') { ret = ret * 10 + (c - '0'), c = getchar(); }}int main(int argc, const char * argv[]){ scan_d(n); for (int i = 0; i < n; i++) { scan_d(val[i]); } int res = 0; // 单调递减栈 for (int i = 0; i < n; i++) { while (!si.empty() && val[i] > val[si.top()]) { si.pop(); } if (!si.empty()) { res = max(res, val[i] ^ val[si.top()]); } si.push(i); } while (!si.empty()) { si.pop(); } // 反向单调递减栈 for (int i = n - 1; i >= 0; i--) { while (!si.empty() && val[i] > val[si.top()]) { si.pop(); } if (!si.empty()) { res = max(res, val[i] ^ val[si.top()]); } si.push(i); } cout << res << '\n'; return 0;}
阅读全文
0 0
- 51nod 1423:最大二“货”
- 51nod 1423 最大二“货”
- 51Nod-1423-最大二"货"
- 51nod-1423 最大二“货”(单调栈)
- 单调栈——51nod 1423 最大二“货”
- 51nod 1423 最大“二货”【单调栈】
- 【单调栈】51Nod 1423 最大二“货”
- 51Nod 斜率最大
- 51Nod-斜率最大
- 51Nod 斜率最大
- 51nod 1100 斜率最大
- 51nod 1442 最大流
- 最大的奖励 51nod
- 51NOD 1100 斜率最大
- 51nod 1100 斜率最大
- 51NOD 1272 最大距离
- 51nod 1100 斜率最大
- 51nod 1272 最大距离
- JVM中对象的创建过程
- Java菜鸟成长之路__Day_3_Java_二维数组
- 从小工到专家【借鉴】
- scala-特质
- 树莓派
- 51Nod-1423-最大二"货"
- 说说struts1与struts2的区别
- 虚拟机是这样理解方法表的
- 喷水装置
- mysql高性能索引的探索
- 《小白兔到大黑牛》第二篇基于源码自己实现简单的ArrayList中简单方法
- java-完数
- scanf与scanf_s的区别
- SSO单点登录