ধরুন আমাদের কাছে সংখ্যার সংখ্যার একটি তালিকা এবং প্রশ্নের একটি তালিকা রয়েছে যেখানে প্রতিটি প্রশ্নে [x, সীমা] রয়েছে। আমাদের এমন একটি তালিকা খুঁজে বের করতে হবে যাতে প্রতিটি প্রশ্নের জন্য [x, সীমা], আমরা সংখ্যায় একটি উপাদান e পাই যাতে e ≤ সীমা এবং e XOR x সর্বাধিক করা হয়। যদি এমন কোনো উপাদান না থাকে, তাহলে -1 রিটার্ন করুন।
সুতরাং, যদি ইনপুটটি nums =[3, 5, 9] queries =[[4, 6],[2, 0]] এর মত হয়, তাহলে আউটপুট হবে [3, -1], প্রথম প্রশ্নের মতো, আমরা সংখ্যায় 2 বা 4 ব্যবহার করতে পারি। 3 ^ 4 =7 যখন 5 ^ 4 =3 তাই আমরা 3 নির্বাচন করি যা বড় XOR দেয়। দ্বিতীয় ক্যোয়ারীতে, এমন কোন সংখ্যা নেই যা 0 এর থেকে কম বা সমান, তাই আমরা এটিকে -1 এ সেট করেছি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
trie :=একটি নতুন মানচিত্র
-
একটি ফাংশন বিটস() সংজ্ঞায়িত করুন। এর জন্য i
লাগবে -
i
এর 32 বিট বাইনারি উপস্থাপনা ফেরত দিন -
একটি ফাংশন সন্নিবেশ সংজ্ঞায়িত করুন। এর জন্য i
লাগবে -
নোড :=চেষ্টা করুন
-
প্রতিটি c-এর জন্য বিট(i), করুন
-
নোড :=যদি c নোডে না থাকে তবে এর ভিতরে একটি খালি মানচিত্র ঢোকান
-
-
নোড[2] :=i
-
একটি ফাংশন ক্যোয়ারী () সংজ্ঞায়িত করুন। এর জন্য i
লাগবে -
নোড :=চেষ্টা করুন
-
প্রতিটি c-এর জন্য বিট(i), করুন
-
rc :=c XOR 1
-
নোড :=নোড[আরসি] যদি বিদ্যমান থাকে অন্যথায় নোড[সি]
-
-
রিটার্ন নোড[2]
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
তালিকা A
সাজান -
B :=প্রতিটি ক্যোয়ারী সূচক i এবং ক্যোয়ারী মান x এবং সীমার জন্য ফর্মের উপাদানগুলির একটি তালিকা (i, x, সীমা)। তারপর সীমার উপর ভিত্তি করে সাজান
-
(j, n, ans) :=(0, A এর আকার , প্রশ্নগুলির মতো আকারের একটি তালিকা, -1 দিয়ে পূরণ করুন)
-
প্রতিটি সূচকের জন্য i এবং মান x এবং B তে সীমা, করুন
-
যখন j
-
সন্নিবেশ (A[j])
-
j :=j + 1
-
-
যদি j অ-শূন্য হয়, তাহলে
-
উত্তর[i] :=প্রশ্ন(x)
-
-
-
উত্তর ফেরত দিন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
class Solution:
def solve(self, A, queries):
trie = {}
def bits(i):
return map(int, bin(i)[2:].zfill(32))
def insert(i):
node = trie
for c in bits(i):
node = node.setdefault(c, {})
node[2] = i
def query(i):
node = trie
for c in bits(i):
rc = c ^ 1
node = node.get(rc, node.get(c))
return node[2]
A.sort()
B = sorted([(i, x, limit) for i, (x, limit) in enumerate(queries)], key=lambda x: x[2])
j, n, ans = 0, len(A), [-1] * len(queries)
for i, x, limit in B:
while j < n and A[j] <= limit:
insert(A[j])
j += 1
if j:
ans[i] = query(x)
return ans
ob = Solution()
nums = [3, 5, 9]
queries = [
[4, 6],
[2, 0]
]
print(ob.solve(nums, queries)) ইনপুট
[3, 5, 9], [[4, 6],[2, 0]]
আউটপুট
[3, -1]