zoukankan      html  css  js  c++  java
  • 51nod 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
    单组测试数据。
    第一行有一个整数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
    ", res);
    	//system("pause");
    	return 0;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    使用C#开发ActiveX控件 并制作Cab包
    asp.net后台创建table设置宽度百分比
    Sql按姓名查出某个人的成绩排名
    获得DataGridView多选框值
    解决iframe窗体丢失Session时登录窗口显示在子页面的问题
    xml返回数组数据
    安卓界面组件文本框
    安卓的UI界面开发(初学者推荐)
    安卓布局
    安卓界面组件按钮
  • 原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4899510.html
Copyright © 2011-2022 走看看