51nod 1423:最大二“货”
2015-10-18 16:53
344 查看
1423 最大二“货”
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
取消关注
白克喜欢找一个序列中的次大值。对于一个所有数字都不同的序列 x1, x2, ..., xk (k > 1) ,他的次大值是最大的 xj ,并且满足 xj ≠maxki=1 xi
对于一个所有数字都不同的序列 x1, x2, ..., xk (k > 1) ,他的幸运数字是最大值和次大值的异或值(Xor)。
现在有一个序列 s1, s2, ..., sn (n > 1) 。 Undefined
control sequence \[ 表示子段 sl, sl+1, ..., sr 。你的任务是找出所有子段的最大幸运数字。
注意,序列s中的所有数字都是不同的。
Input
Output
Input示例
Output示例
维护一个栈顶到栈底逐渐增大的栈,这样的话栈内元素就是各自区间内的最大值。发现一个元素大于栈顶元素的时候入栈,并且入栈的时候会发现它本身和它栈内左边的元素恰恰是区间的次大值和最大值,相与取结果。最后要从后到头重来一次。
代码:
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
取消关注
白克喜欢找一个序列中的次大值。对于一个所有数字都不同的序列 x1, x2, ..., xk (k > 1) ,他的次大值是最大的 xj ,并且满足 xj ≠maxki=1 xi
对于一个所有数字都不同的序列 x1, x2, ..., xk (k > 1) ,他的幸运数字是最大值和次大值的异或值(Xor)。
现在有一个序列 s1, s2, ..., sn (n > 1) 。 Undefined
control sequence \[ 表示子段 sl, sl+1, ..., sr 。你的任务是找出所有子段的最大幸运数字。
注意,序列s中的所有数字都是不同的。
Input
单组测试数据。 第一行有一个整数n (1 < n ≤ 10^5)。 第二行包含n个不同的整数 s1, s2, ..., sn (1 ≤ si ≤ 10^9)。
Output
输出所有子段的最大幸运值。
Input示例
5 5 2 1 4 3 5 9 8 3 5 7
Output示例
7 15
维护一个栈顶到栈底逐渐增大的栈,这样的话栈内元素就是各自区间内的最大值。发现一个元素大于栈顶元素的时候入栈,并且入栈的时候会发现它本身和它栈内左边的元素恰恰是区间的次大值和最大值,相与取结果。最后要从后到头重来一次。
代码:
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #pragma warning(disable:4996) using namespace std; #define maxn 100005 int 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; }
相关文章推荐
- windows安装TortoiseGit详细使用教程
- JDBC 基本操作案例
- HTML学习笔记之超链接的使用
- ios UITableView 异步加载图片并防止错位
- 基于ZooKeeper的分布式锁和队列
- Oracle中函数、存储过程、触发器
- 对象之间的调用机制 通信方式
- 〈灰色系统理论及其应用〉第7版,刘思峰 P153例7.3.1
- phpredis:php一个key-value扩展
- 九度OJ 1036:Old Bill (老比尔) (基础题)
- OpenSuse13.2硬盘安装
- Linux学习 -- Shell编程 -- 字符处理命令
- Java 之JavaBean 、EJB 和POJO
- 条款33:避免遮掩继承而来的名称
- 九度OJ 1036:Old Bill (老比尔) (基础题)
- hdu(5505)——GT and numbers
- 使表单居中的方式
- 1042. 字符统计(20)
- JAVA Hibernate工作原理及为什么要用
- Struts-输入校验