-1
Этот вопрос задан в acm-icpc в 2009 году. У меня есть решение в java, но почему я получаю неправильный ответ. Пожалуйста, помогите мне узнать об ошибке. Является ли конструкция trie прекрасной, и найти максимум с trie является правильным. я пытаюсь это первый разМаксимальный XOR-Subarray
Проблема Link
import java.io.*;
import java.util.*;
public class Main{
public static void main(String []args){
Scanner sc=new Scanner(System.in);
//System.out.print((4&(1L<<3)));
int tes=sc.nextInt();
while(tes-->0){
int size=sc.nextInt();
long arr[]=new long[size];
for(int i=0;i<size;i++){
arr[i]=sc.nextLong();
}
long pre=0;
long res=0;
Trie t=new Trie();
t.insert(0);
for(int i=0;i<size;i++){
pre=pre^arr[i];
//System.out.println(Integer.toBinaryString(pre));
t.insert(pre);
long y=t.query(pre);
y=y^pre;
if(y>res){
res=y;
}
}
System.out.print(res);}
}
}
class TrieNode{
long val;
TrieNode left;
TrieNode right;
TrieNode(){
}
TrieNode(int i){
this.val=i;
}
}
class Trie{
private final TrieNode root;
Trie(){
root=new TrieNode();
root.val=-1;
}
void insert(long num){
TrieNode t=root;
for(int i=63;i>=0;i--){
if(((num>>i)&1)!=0){
if(t.right==null){
TrieNode temp=new TrieNode();
t.right=temp;
}
t=t.right;
}
else{
if(t.left==null){
TrieNode temp=new TrieNode();
t.left=temp;
}
t=t.left;
}
t.val=num;
}
}
long query(long num){
int i=0;
TrieNode t=root;
for(i=63;i>=0;i--){
if(((num>>i)&1)==0){
if(t.right!=null){
t=t.right;
}
else t=t.left;
}
else{
if(t.left!=null){
t=t.left;
}
else t=t.right;
}
}
return t.val;
}
}
Вы должны включать краткое изложение проблемы, а не просто ссылку на внешний ресурс. Кроме того, правильное форматирование облегчает чтение другим пользователям другим пользователям. – beatngu13