Submission
# | When | Author | Problem | Language | CPU | Memory | |
---|---|---|---|---|---|---|---|
20858 | 2024-06-12 23:48:48 | AHAMMED_99 | Find MinMaxXoR Number | Java | 1102 ms | 46292 kb | Time Limit Exceeded - 7 |
Test Cases
# | CPU | Memory | Points | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 106 ms | 42620 kb | 1 | Accepted | |||||||
2 | 103 ms | 38596 kb | 1 | Accepted | |||||||
3 | 109 ms | 42340 kb | 1 | Accepted | |||||||
4 | 132 ms | 40776 kb | 1 | Accepted | |||||||
5 | 222 ms | 45416 kb | 1 | Accepted | |||||||
6 | 289 ms | 46292 kb | 1 | Accepted | |||||||
7 | 1102 ms | 720 kb | 0 | Time Limit Exceeded | |||||||
8 | 0 ms | 0 kb | 0 | Skipped | |||||||
9 | 0 ms | 0 kb | 0 | Skipped | |||||||
10 | 0 ms | 0 kb | 0 | Skipped | |||||||
11 | 0 ms | 0 kb | 0 | Skipped | |||||||
12 | 0 ms | 0 kb | 0 | Skipped | |||||||
13 | 0 ms | 0 kb | 0 | Skipped | |||||||
14 | 0 ms | 0 kb | 0 | Skipped | |||||||
15 | 0 ms | 0 kb | 0 | Skipped | |||||||
16 | 0 ms | 0 kb | 0 | Skipped |
Source Code
import java.util.Scanner; import java.util.ArrayDeque; import java.util.Deque; public class MinMaxXoR { public static int calculateMinMaxXoR(int[] A, int N) { int MinMaxXoR = 0; for (int length = 2; length <= N; ++length) { Deque<Integer> minDeque = new ArrayDeque<>(); Deque<Integer> maxDeque = new ArrayDeque<>(); for (int i = 0; i < N; ++i) { // Remove elements not in the current window if (!minDeque.isEmpty() && minDeque.peekFirst() <= i - length) { minDeque.pollFirst(); } if (!maxDeque.isEmpty() && maxDeque.peekFirst() <= i - length) { maxDeque.pollFirst(); } // Maintain deques in non-increasing order for min and max while (!minDeque.isEmpty() && A[minDeque.peekLast()] >= A[i]) { minDeque.pollLast(); } while (!maxDeque.isEmpty() && A[maxDeque.peekLast()] <= A[i]) { maxDeque.pollLast(); } minDeque.offerLast(i); maxDeque.offerLast(i); // Calculate XOR for the current window if (i >= length - 1) { int minVal = A[minDeque.peekFirst()]; int maxVal = A[maxDeque.peekFirst()]; MinMaxXoR ^= (minVal ^ maxVal); } } } return MinMaxXoR; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] A = new int[N]; for (int i = 0; i < N; ++i) { A[i] = scanner.nextInt(); } int result = calculateMinMaxXoR(A, N); System.out.println(result); scanner.close(); } }