Cod sursa(job #1293461)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 15 decembrie 2014 22:26:59
Problema Xor Max Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 1.58 kb
import java.util.*;
import java.io.*;

public class Main {
	
	static class MaxPos {
		int start;
		int stop;
		int max;
		
		public MaxPos(int start, int stop, int max) {
			this.start = start;
			this.stop = stop;
			this.max = max;
		}

		@Override
		public String toString() {
			return max + " " + (start+1) + " " + (stop+1); 
		}
		
		public int len() {
			return stop - start;
		}
		
		public void setMaxPos(int max, int start, int stop) {
			this.max = max;
			this.start = start;
			this.stop = stop;
		}
		
		public void setMaxPos(MaxPos other) {
			max = other.max;
			start = other.start;
			stop = other.stop;
		}
	}

	public static void main(String[] args) throws IOException {
		Scanner scn = new Scanner(new FileInputStream("xormax.in"));
		int N = scn.nextInt();
		int[] xorSeq = new int[N];
		for (int i = 0; i < xorSeq.length; i++) {
			xorSeq[i] = scn.nextInt();
		}
		scn.close();
			
		MaxPos maxSoFar = new MaxPos(1, 1, xorSeq[0]);
		MaxPos maxEndingHere = new MaxPos(1, 1, xorSeq[0]);
		
		for (int i = 1; i < xorSeq.length; i++) {
			if ((maxEndingHere.max ^ xorSeq[i]) > xorSeq[i]) {
				maxEndingHere.max = maxEndingHere.max ^ xorSeq[i];
				maxEndingHere.stop = i;
			}
			else if ((maxEndingHere.max ^ xorSeq[i]) < xorSeq[i]) {
				maxEndingHere.setMaxPos(xorSeq[i], i, i);
			}
			
			if ((maxSoFar.max < maxEndingHere.max) || 
					(maxSoFar.max == maxEndingHere.max && maxSoFar.len() > maxEndingHere.len())) {
				maxSoFar.setMaxPos(maxEndingHere);
			}	
		}
		
		BufferedWriter bw = new BufferedWriter(new FileWriter("xormax.out"));
		bw.write(maxSoFar.toString());
		bw.close();
	}

}