- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Suppose we have an array called nums with non-negative values. We also have another array called queries where queries[i] has a pair (xi, mi). The answer of ith query is the maximum bitwise XOR value of xi and any element of nums that less than or equal to mi. If all elements in nums are larger than mi, then the answer is -1. So we have to find an array answer where size of answer is same as size of query and answer[i] is the answer to the ith query.

So, if the input is like nums = [0,1,2,3,4] queries = [[3,1],[1,3],[5,6]], then the output will be [3,3,7], because

0 and 1 are not greater than 1. 0 XOR 3 = 3 and 1 XOR 3 = 2, here larger of these two is 3.

1 XOR 2 = 3.

5 XOR 2 = 7.

To solve this, we will follow these steps −

m := size of nums

n := size of queries

queries = make a triplet (i, x, limit) for each index i, and pair (x, limit) in queries

sort queries based on limit

nums := sort the list nums

res := an array of size n and fill with 0

for k in range 31 to 0, decrease by 1, do

prefixes := a new set

j := 0

for each index i and value (x, limit) in queries, do

while j <= m - 1 and nums[j] <= limit, do

shift nums[j] to the right k bits and insert into prefixes

j := j + 1

if prefixes is empty, then

res[i] := -1

otherwise,

res[i] = quotient of res[i]/2

target := res[i] XOR 1

if (x after shifting k bits to right) XOR target is in prefixes, then

res[i] := target

return res

Let us see the following implementation to get better understanding

def solve(nums, queries): m, n = len(nums), len(queries) queries = sorted(((i, x, limit) for i, (x, limit) in enumerate(queries)), key=lambda x: x[2]) nums = sorted(nums) res = [0] * n for k in range(31, -1, -1): prefixes = set() j = 0 for i, x, limit in queries: while j <= m - 1 and nums[j] <= limit: prefixes.add(nums[j] >> k) j += 1 if not prefixes: res[i] = -1 else: res[i] <<= 1 target = res[i] ^ 1 if (x >> k) ^ target in prefixes: res[i] = target return res nums = [0,1,2,3,4] queries = [[3,1],[1,3],[5,6]] print(solve(nums, queries))

[0,1,2,3,4], [[3,1],[1,3],[5,6]]

[3, 3, 7]

- Related Questions & Answers
- Maximum possible XOR of every element in an array with another array in C++
- PHP program to find the maximum element in an array
- Program to find maximum XOR for each query in Python
- C# program to find maximum and minimum element in an array
- Python Program to find largest element in an array
- C++ Program to Find Maximum Element in an Array using Binary Search
- C# Program to find the largest element from an array
- C# Program to find the smallest element from an array
- Program to find maximum product of two distinct elements from an array in Python
- Python Program to find the largest element in an array
- Program to find the minimum (or maximum) element of an array in C++
- Program to perform XOR operation in an array using Python
- Python Program to print element with maximum vowels from a List
- Write a program in Go language to find the element with the maximum value in an array
- Recursive program to find an element in an array linearly.

Advertisements