#include <stdio.h>


int get_max( const int arr[], const int n )

{

    int min, max;

    min = max = arr[ 0 ];


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

    {

        for( int j = i - 5; j >= 0; --j )

        {

            int val = arr[ i ] ^ min;

            if( max < val )

                max = val;

            if( min <= arr[ i ] )

                break;

            if( min > arr[ j ] )

                min = arr[ j ];

            if( max >= arr[ i ] + min )

                break;

        }

        min = arr[ i ];

    }

    return  max;

}


int main()

{

    int n;

    scanf( "%d", &n );

    int arr[ n ];

    for( int i = 0; i < n; ++i )

        scanf( "%d", arr + i );

    printf( "%d\n", get_max( arr, n ) );

    return 0;

}


이렇게 조건을 두 개 줄일 수 있음.

논리적으로 따지면 더 줄일 수 있을것 같은데 귀찮.