ধরুন আমাদের কাছে অন্তর্বর্তীগুলির একটি তালিকা আছে, যেখানে ব্যবধান[i] একটি জোড়া আছে (left_i, right_i) ith ব্যবধানকে প্রতিনিধিত্ব করে যেটি left_i থেকে শুরু হয় এবং ডান_i (উভয়ই অন্তর্ভুক্ত) থেকে শেষ হয়। আমরা জিজ্ঞাসা নামক আরেকটি অ্যারে আছে. jth প্রশ্নের উত্তর হল ক্ষুদ্রতম ব্যবধানের আকার i যেমন left_i <=queries[j] <=right_i। যদি আমরা এই ধরনের ব্যবধান খুঁজে না পাই, তাহলে -1 ফেরত দিন। আমাদের প্রশ্নের উত্তর সম্বলিত একটি অ্যারে খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি অন্তরের মত হয় =[[2,5],[3,5],[4,7],[5,5]] প্রশ্ন =[3,4,5,6], তাহলে আউটপুট হবে হতে [3, 3, 1, 4], কারণ প্রশ্নগুলি নিম্নরূপ প্রক্রিয়া করা হয় -
-
প্রশ্নের জন্য =3:ব্যবধান [3,5] হল সবচেয়ে ছোট যা 3 ধারণ করে। তাই, 5 - 3 + 1 =3।
-
প্রশ্নের জন্য =4:ব্যবধান [3,5] হল সবচেয়ে ছোট যেটি 4 ধারণ করে। তাই, 5 - 3 + 1 =3।
-
প্রশ্নের জন্য =5:ব্যবধান [5,5] হল সবচেয়ে ছোট যেটি 5 ধারণ করে। তাই, 5 - 5 + 1 =1।
-
প্রশ্নের জন্য =6:ব্যবধান [4,7] হল সবচেয়ে ছোট যেটি 6 ধারণ করে। তাই, 7 - 4 + 1 =4।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
intervals :=তালিকার ব্যবধানগুলিকে বিপরীত ক্রমে সাজান
-
h :=একটি নতুন তালিকা
-
res :=একটি নতুন মানচিত্র
-
প্রশ্নের সাজানো তালিকায় প্রতিটি q-এর জন্য, করুন
-
যখন ব্যবধান খালি নয় এবং শেষ ব্যবধানের শেষ সময় <=q, do
-
(i, j) :=ব্যবধান থেকে শেষ ব্যবধান, এবং এটি সরান
-
যদি j>=q হয়, তাহলে
-
স্তূপে জোড়া (j-i+1, j) সন্নিবেশ করান h
-
-
-
যদিও h খালি নয় এবং h
-এ শীর্ষ সর্বাধিক ব্যবধানের শেষ সময়
-
h
থেকে শীর্ষ উপাদান মুছুন
-
-
res[q] :=h এর সর্বোচ্চ ব্যবধানের শুরুর সময় যদি h খালি না হয় অন্যথায় -1
-
-
সমস্ত q প্রশ্নের জন্য res[q] তালিকা ফেরত দিন
উদাহরণ
আরও ভালোভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি
import heapq
def solve(intervals, queries):
intervals = sorted(intervals)[::-1]
h = []
res = {}
for q in sorted(queries):
while intervals and intervals[-1][0] <= q:
i, j = intervals.pop()
if j >= q:
heapq.heappush(h, [j - i + 1, j])
while h and h[0][1] < q:
heapq.heappop(h)
res[q] = h[0][0] if h else -1
return [res[q] for q in queries]
intervals = [[2,5],[3,5],[4,7],[5,5]]
queries = [3,4,5,6]
print(solve(intervals, queries)) ইনপুট
[[2,5],[3,5],[4,7],[5,5]], [3,4,5,6]
আউটপুট
[3, 3, 1, 4]