Loading...
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
  1. import java.util.Scanner;
  2. import java.util.ArrayDeque;
  3. import java.util.Deque;
  4.  
  5. public class MinMaxXoR {
  6.  
  7. public static int calculateMinMaxXoR(int[] A, int N) {
  8. int MinMaxXoR = 0;
  9.  
  10. for (int length = 2; length <= N; ++length) {
  11. Deque<Integer> minDeque = new ArrayDeque<>();
  12. Deque<Integer> maxDeque = new ArrayDeque<>();
  13.  
  14. for (int i = 0; i < N; ++i) {
  15. // Remove elements not in the current window
  16. if (!minDeque.isEmpty() && minDeque.peekFirst() <= i - length) {
  17. minDeque.pollFirst();
  18. }
  19. if (!maxDeque.isEmpty() && maxDeque.peekFirst() <= i - length) {
  20. maxDeque.pollFirst();
  21. }
  22.  
  23. // Maintain deques in non-increasing order for min and max
  24. while (!minDeque.isEmpty() && A[minDeque.peekLast()] >= A[i]) {
  25. minDeque.pollLast();
  26. }
  27. while (!maxDeque.isEmpty() && A[maxDeque.peekLast()] <= A[i]) {
  28. maxDeque.pollLast();
  29. }
  30.  
  31. minDeque.offerLast(i);
  32. maxDeque.offerLast(i);
  33.  
  34. // Calculate XOR for the current window
  35. if (i >= length - 1) {
  36. int minVal = A[minDeque.peekFirst()];
  37. int maxVal = A[maxDeque.peekFirst()];
  38. MinMaxXoR ^= (minVal ^ maxVal);
  39. }
  40. }
  41. }
  42.  
  43. return MinMaxXoR;
  44. }
  45.  
  46. public static void main(String[] args) {
  47. Scanner scanner = new Scanner(System.in);
  48. int N = scanner.nextInt();
  49. int[] A = new int[N];
  50.  
  51. for (int i = 0; i < N; ++i) {
  52. A[i] = scanner.nextInt();
  53. }
  54.  
  55. int result = calculateMinMaxXoR(A, N);
  56. System.out.println(result);
  57.  
  58. scanner.close();
  59. }
  60. }
  61.