Loading...
Submission
# When Author Problem Language CPU Memory
20857 2024-06-12 23:46:54 AHAMMED_99 Find MinMaxXoR Number C 1100 ms 5628 kb Time Limit Exceeded - 7
Test Cases
# CPU Memory Points
1 1 ms 3568 kb 1 Accepted
2 1 ms 5592 kb 1 Accepted
3 1 ms 5628 kb 1 Accepted
4 2 ms 5504 kb 1 Accepted
5 6 ms 5616 kb 1 Accepted
6 19 ms 5600 kb 1 Accepted
7 1100 ms 656 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. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. #define MAX_N 500000
  6.  
  7. int A[MAX_N];
  8. int minDeque[MAX_N];
  9. int maxDeque[MAX_N];
  10.  
  11. int calculateMinMaxXoR(int N) {
  12. int MinMaxXoR = 0;
  13.  
  14. for (int length = 2; length <= N; ++length) {
  15. int minFront = 0, minBack = 0;
  16. int maxFront = 0, maxBack = 0;
  17.  
  18. for (int i = 0; i < N; ++i) {
  19. // Remove elements not in the current window
  20. if (minFront < minBack && minDeque[minFront] <= i - length) {
  21. ++minFront;
  22. }
  23. if (maxFront < maxBack && maxDeque[maxFront] <= i - length) {
  24. ++maxFront;
  25. }
  26.  
  27. // Maintain deques in non-increasing order for min and max
  28. while (minFront < minBack && A[minDeque[minBack - 1]] >= A[i]) {
  29. --minBack;
  30. }
  31. while (maxFront < maxBack && A[maxDeque[maxBack - 1]] <= A[i]) {
  32. --maxBack;
  33. }
  34.  
  35. minDeque[minBack++] = i;
  36. maxDeque[maxBack++] = i;
  37.  
  38. // Calculate XOR for the current window
  39. if (i >= length - 1) {
  40. int minVal = A[minDeque[minFront]];
  41. int maxVal = A[maxDeque[maxFront]];
  42. MinMaxXoR ^= (minVal ^ maxVal);
  43. }
  44. }
  45. }
  46.  
  47. return MinMaxXoR;
  48. }
  49.  
  50. int main() {
  51. int N;
  52. scanf("%d", &N);
  53.  
  54. for (int i = 0; i < N; ++i) {
  55. scanf("%d", &A[i]);
  56. }
  57.  
  58. int result = calculateMinMaxXoR(N);
  59. printf("%d\n", result);
  60.  
  61. return 0;
  62. }
  63.