51nod 1423:最大二“货”
来源:互联网 发布:四季彩软件下载 编辑:程序博客网 时间:2024/05/17 04:59
1423 最大二“货”
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
取消关注
白克喜欢找一个序列中的次大值。对于一个所有数字都不同的序列
对于一个所有数字都不同的序列
现在有一个序列
注意,序列s中的所有数字都是不同的。
Input
单组测试数据。第一行有一个整数n (1 < n ≤ 10^5)。第二行包含n个不同的整数 s1, s2, ..., sn (1 ≤ si ≤ 10^9)。
Output
输出所有子段的最大幸运值。
Input示例
55 2 1 4 359 8 3 5 7
Output示例
715
维护一个栈顶到栈底逐渐增大的栈,这样的话栈内元素就是各自区间内的最大值。发现一个元素大于栈顶元素的时候入栈,并且入栈的时候会发现它本身和它栈内左边的元素恰恰是区间的次大值和最大值,相与取结果。最后要从后到头重来一次。
代码:
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #pragma warning(disable:4996) using namespace std;#define maxn 100005int n;int val[maxn];int lef[maxn];int stack[maxn];int main(){int i, res, top, tmp;scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", val + i);res = 0;top = 0;memset(stack, 0, sizeof(stack));for (i = 0; i < n; i++){while (top >= 1 && val[i] > val[stack[top]]){--top;}if (top){res = max(res, val[i] ^ val[stack[top]]);}stack[++top] = i;}top = 0;memset(stack, 0, sizeof(stack));for (i = n; i >= 0; i--){while (top >= 1 && val[i] > val[stack[top]]){--top;}if (top){res = max(res, val[i] ^ val[stack[top]]);}stack[++top] = i;}printf("%d\n", res);//system("pause");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 最大距离
- Eclipse向Android Studio工程的完美迁移
- ZOJ2478
- ios学习之alertView的基本使用
- Struts-输入校验
- JAVA Hibernate工作原理及为什么要用
- 51nod 1423:最大二“货”
- 1042. 字符统计(20)
- STM8S AWU与WWD配合
- 〈灰色系统理论及其应用〉第7版,刘思峰 P153例7.3.1
- 对象之间的调用机制 通信方式
- 九度OJ 1036:Old Bill (老比尔) (基础题)
- phpredis:php一个key-value扩展
- CentOS安装nexus(Maven仓库管理器)
- JDBC 数据库连接 创建表格、插入、查询、删除、修改数据 基本操作