In this HackerEarth Jumpy Humpy problem solution, Humpy likes to jump from one building to another. But he only jumps to the next higher building and stops when no higher building is available. Stamina required for a journey is the xor of all the heights on which humpy jumps until he stops.

If heights are [1 2 4], and he starts from 1, goes to 2 stamina required is 1 xor 2 = 3, then from 2 to 3. Stamina for the entire journey is 1 xor 2 xor 4 = 7. Find the maximum stamina required if can start his journey from any building.


HackerEarth Jumpy Humpy problem solution


HackerEarth Jumpy Humpy problem solution.

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main()
{
    ll n;
    cin >> n;

    vector<ll>arr(n, 0);

    for(int i = 0; i < n; i++)cin >> arr[i];

    vector<ll>nxt(n, 0);

    stack<ll>s;

    s.push(0);

    for(int i = 1; i < n; i++){

        while(!s.empty() && arr[i] > arr[s.top()]){
            nxt[s.top()] = i;
            s.pop();
        }

        s.push(i);
    }

    while(!s.empty()){
        nxt[s.top()] = -1;
        s.pop();
    }


    vector<ll>dp(n, 0);
    ll ans = 0;
    for(int i = n - 1; i >= 0; i--){

        if(nxt[i] == -1){
            dp[i] = arr[i];
            ans = max(ans, dp[i]);
            continue;
        }

        dp[i] = arr[i] ^ dp[nxt[i]];
        ans = max(ans, dp[i]);
    }

    cout << ans << endl;
    return 0;
}