Round #172 (Div. 2) D. Maximum Xor Secondary——栈的高级应用消除冗余操作
来源:互联网 发布:mac 桌面 窗口 关不掉 编辑:程序博客网 时间:2024/04/28 07:15
题意:给出一个元素互不相同的序列,求所有子段的最大值和次大值的异或值中的最大值。
我们从最直接的方法开始考虑,枚举所有的子段:先沿着序列从前向后枚举子段的结束的位置,对于每一个结束位置,向前枚举子段开始的位置,动态更新最大值和次小值。这样的做法是O(n^2),我们再来看看冗余的操作:对于每一个结束位置,在枚举开始位置的时候,一旦枚举到开始位置的元素的值比结束位置大的时候,就可以停止枚举进入下一个开始位置了。我们可以维护一个栈:对每个结束位置上的元素,不断的比较其和栈顶元素的大小并叫栈顶元素弹出知道栈为空或栈顶元素的值大于待入栈的元素,同时计算该元素和栈顶元素的异或值,最后将其压入栈中,进入下一个结束位置。
n = input()num = map(int, raw_input().split())sta, res = [], -1sta.append(num[0])for i in range(1, n): while sta: res = (num[i] ^ sta[-1]) if (num[i] ^ sta[-1]) > res else res #print num[i], sta[-1], res if sta[-1] > num[i]: break else: sta.pop() sta.append(num[i])print res
- Round #172 (Div. 2) D. Maximum Xor Secondary——栈的高级应用消除冗余操作
- Codeforces Round #172 (Div. 2)---D. Maximum Xor Secondary(RMQ + 二分)
- Codeforces Round #172 (Div. 1) BMaximum Xor Secondary 单调栈
- CF 280B - Maximum Xor Secondary(单调栈)
- 【Codeforces Round 169 (Div 2) D】【简单数位贪心】Little Girl and Maximum XOR 区间选两数使得异或值尽可能大
- Codeforces Round #435 (Div. 2) C. Mahmoud and Ehab and the xor(xor运算应用)
- Codeforces Round #221 (Div. 2)-D. Maximum Submatrix 2
- Codeforces Beta Round #67 (Div. 2) D. Big Maximum Sum
- cf Round #276 (Div. 2) D. Maximum Value
- Codeforces Round #276 (Div. 2)-D. Maximum Value
- Codeforces Round #245 (Div. 1)——Xor-tree
- HDU-4825 Xor Sum &&Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (Trie树)
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number —— 莫队算法
- Round #149 (Div. 2) D. Dispute——乱搞
- Codeforces Beta Round #75 (Div. 2 Only)——D
- Codeforces Round #294 (Div. 2)——C.D
- Codeforces Round #305 (Div. 2)——D
- Codeforces Round #340 (Div. 2)——D
- VB学习第四周续--四位整数逆序
- shell脚本报错说 bash解释器损坏,没有该目录或文件的解决方案
- android 2.3源码下载
- MySQL存储过程详解 mysql 存储过程
- 广研二面题目
- Round #172 (Div. 2) D. Maximum Xor Secondary——栈的高级应用消除冗余操作
- 常用sql优化方法
- struts2 标签 实现 for循环
- .NET 读取XML文件节点信息
- shell将指定文件移除到指定文件夹
- WEB应用压力测试工具
- OpenLDAP安装错误不完全列表
- 关于Ubuntu下Mysql设置默认字符集
- iostream 一