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;
    }


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

  • 相关阅读:
    2.安装双系统linux+windows
    1.在虚拟机上安装linux系统
    python2升级python3(linux)并解决兼容问题
    selenium模拟登录_百度指数
    解决YUM下LoadedpluginsfastestmirrorDeterminingfastestmirrors 的问题
    yum源地址卸载、下载、安装
    Redis无法启动You may fix this problem by either reducing the size of the Redis heap with the --maxheap
    第二章 演化式架构师
    第一章 微服务
    第19章 未来的软件构架
  • 原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4899510.html
Copyright © 2011-2022 走看看