• HackerRank "AND xor OR"


    Actually I think problem statement is somewhat misleading. No need to mention range [L, R] at all.

    The intention is a variation to "Largest Rectangle" which is a classic stack problem on LeetCode.

    But you need to run Largest Rectangle twice: increased and decreased.

    #include <cmath>
    #include <stack>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    
    int main() {
        int n; cin >> n;
        vector<int> in(n);
        for(int i = 0; i < n; i ++)
            cin >> in[i];
        
        int ret = 0;
        {
            in.push_back(0); 
            stack<int> stk;
            for (int i = 0; i < in.size(); i++)
            {
                if (stk.empty() || in[i] > stk.top())
                {
                    stk.push(in[i]);
                }
                else
                {
                    int lastV = stk.top(); stk.pop();
                    if (!stk.empty())
                    {
                        ret = std::max(ret, (lastV ^ stk.top()));            
                        //cout << lastV << "-" << stk.top() << "=" << (lastV ^ stk.top()) << endl;
                    }
                    i--;
                }
            }
            in.pop_back();
        }
        {
            
            stack<int> stk;
            in.insert(in.begin(), 0);
            for (int i = in.size() - 1; i >= 0; i --)
            {
                if (stk.empty() || in[i] > stk.top())
                {
                    stk.push(in[i]);
                }
                else
                {
                    int lastV = stk.top(); stk.pop();
                    if (!stk.empty())
                    {
                        ret = std::max(ret, (lastV ^ stk.top()));            
                        //cout << lastV << "-" << stk.top() << "=" << (lastV ^ stk.top()) << endl;
                    }
                    i++;
                }
            }
        }
        
        cout << ret << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    领域建模
    中科院
    开放搜索服务OpenSearch
    GUIForDebug
    java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错(转)
    new TimerTask(robot)(转)
    lua-TestMore(转)
    Lua 数据库访问(转)
    推荐谈论高并发柱
    查看文章strncpy()功能更好的文章
  • 原文地址:https://www.cnblogs.com/tonix/p/4988677.html
Copyright © 2020-2023  润新知