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
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define MAX_N 500000 int A[MAX_N]; int minDeque[MAX_N]; int maxDeque[MAX_N]; int calculateMinMaxXoR(int N) { int MinMaxXoR = 0; for (int length = 2; length <= N; ++length) { int minFront = 0, minBack = 0; int maxFront = 0, maxBack = 0; for (int i = 0; i < N; ++i) { // Remove elements not in the current window if (minFront < minBack && minDeque[minFront] <= i - length) { ++minFront; } if (maxFront < maxBack && maxDeque[maxFront] <= i - length) { ++maxFront; } // Maintain deques in non-increasing order for min and max while (minFront < minBack && A[minDeque[minBack - 1]] >= A[i]) { --minBack; } while (maxFront < maxBack && A[maxDeque[maxBack - 1]] <= A[i]) { --maxBack; } minDeque[minBack++] = i; maxDeque[maxBack++] = i; // Calculate XOR for the current window if (i >= length - 1) { int minVal = A[minDeque[minFront]]; int maxVal = A[maxDeque[maxFront]]; MinMaxXoR ^= (minVal ^ maxVal); } } } return MinMaxXoR; } int main() { int N; for (int i = 0; i < N; ++i) { } int result = calculateMinMaxXoR(N); return 0; }