第一行一个整数n,即序列的长度。(2<= n <= 100000) 第二行n个数,依次表示这个序列每个数值V[i], (1 ≤ V[i] ≤ 10^8)且保证V[1]到V[n]中至少存在不同的两个值.
输出一个整数,即最大的幸运值
5 5 2 1 4 3
7
#include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int> num; int main() { int n; cin>>n; for(int i=0;i<n;++i) { int tmp; cin>>tmp; num.push_back(tmp); } int res = 0; for(int i=0;i<n;++i) { for(int j=i-1;j>=0;--j) { //找到就break,因为num[i]作为次大值 if(num[j] > num[i]) { res = max(res,num[j]^num[i]); break; } } for(int j=i+1;j<n;++j) { if(num[j] > num[i]) { res = max(res,num[j]^num[i]); break; } } } cout<<res<<endl; return 0; }
#include <iostream> (720)#include <stack> #include <vector> using namespace std; stack<int> stk; int LuckyOne(vector<int>& data,int n){ int len=n; int maxv=0,tmp; for(int i=0;i<n;i++){ if(stk.empty()) stk.push(data[i]); else{ int top; while(!stk.empty()&&(top=stk.top())){ tmp=top^data[i]; if(maxv<tmp) maxv=tmp; if(top>data[i]) break; else stk.pop(); } stk.push(data[i]); } } return maxv; } int main(){ int n; cin>>n; vector<int> data(n,0); for(int i=0;i<n;i++) cin>>data[i]; cout<<LuckyOne(data,n)<<endl; }
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] a=new int[n]; for(int i=0;i<n;i++) a[i]=sc.nextInt(); int max=0; int temp; for(int i=0;i<n;i++) { for(int j=i-1;j>=0;j--) if(a[j]>=a[i]) { temp=a[i]^a[j]; max=max>temp?max:temp; break; } for(int j=i+1;j<n;j++) if(a[j]>=a[i]) { temp=a[i]^a[j]; max=max>temp?max:temp; break; } } System.out.println(max); } }