একটি ২D অ্যারে arr[][] দেওয়া আছে যাতে ইন্টারভালগুলো সংরক্ষিত আছে এবং একটি সংখ্যা value। লক্ষ্য হলো arr-এ থাকা ইন্টারভালগুলোর মধ্যে কতটিতে value অবস্থিত সেটি বের করা। উদাহরণস্বরূপ, ইন্টারভালগুলো হলো [ [1,5], [3,7] ] এবং value=4 হলে এটি উভয় ইন্টারভালের মধ্যেই পড়ে, তাই কাউন্ট হবে ২।
উদাহরণ ১
ইনপুট
arr[4][2] = { { 1, 20 }, { 12, 25 }, { 32, 40 }, { 15, 18 } } value=16
আউটপুট
প্রদত্ত মানের মধ্যে কোন ইন্টারভালগুলো আছে সেটির সংখ্যা: 3
ব্যাখ্যা
মান ১৬, ১-২০, ১২-২৫ এবং ১৫-১৮ এই তিনটি ইন্টারভালের মধ্যে আছে।
উদাহরণ ২
ইনপুট
arr[4][2] = {{ 1, 20 }, { 20,30 }, { 30, 40 }, { 40, 50 }} value=60
আউটপুট
প্রদত্ত মানের মধ্যে কোন ইন্টারভালগুলো আছে সেটির সংখ্যা: 0
ব্যাখ্যা
মান ৬০, arr[][]-এ থাকা সকল ইন্টারভালের সর্বোচ্চ রেঞ্জের চেয়ে বড়।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে arr-এ থাকা সকল রেঞ্জের সংখ্যাগুলোর জন্য একটি ফ্রিকোয়েন্সি অ্যারে arr_2[] তৈরি করা হয়। প্রতিটি রেঞ্জের arr[i][0] এবং arr[i][1] এর জন্য arr_2[ arr[i][0 বা 1] ]-এ ফ্রিকোয়েন্সি বাড়ানো হয়। শেষে ফ্রিকোয়েন্সি অ্যারেটি আপডেট করা হয়: arr_2[i] = arr_2[i] + arr_2[i-1], কারণ i-1 এর চেয়ে ছোট সংখ্যাগুলো i-এর চেয়েও ছোট, তাই ফ্রিকোয়েন্সি যোগ হয়। এইভাবে arr_2[value] আমাদের বताয় যে মানটি কতগুলো ইন্টারভালের মধ্যে আছে।
ইন্টারভালগুলো ধারণকারী ইন্টিজার অ্যারে
arr[][]নিন।ইনপুট হিসেবে একটি ইন্টিজার
valueনিন।intervals_values(int arr[][2], int size, int value)ফাংশনটিarrএবংvalueগ্রহণ করে মানটি কোন ইন্টারভালগুলোর মধ্যে আছে সেটির সংখ্যা রিটার্ন করে।একটি ফ্রিকোয়েন্সি অ্যারে
arr_2[]নিন।lowএবংhighestভেরিয়েবল দুটিকেINT_MAXএবংINT_MINদিয়ে আরম্ভ করুন।forলুপ দিয়েi=0থেকেi<sizeপর্যন্তarr[][]টрэভার্স করুন।রেঞ্জের বাম মান
temp-এ নিয়েarr_2[temp]-এ এর ফ্রিকোয়েন্সি বাড়ান।রেঞ্জের ডান মান
temp_2-এ নিয়েarr_2[temp_2+1]-এ এর ফ্রিকোয়েন্সি কমান।যদি
temp < lowহয় তবেlow = tempএবং যদিtemp_2 > highestহয় তবেhighest = temp_2সেট করুন।ফ্রিকোয়েন্সি অ্যারেটি ট্রুভার্স করে আপডেট করুন:
arr_2[i] = arr_2[i] + arr_2[i-1]।শেষে
arr_2[value]রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
#define max 1000
int intervals_values(int arr[][2], int size, int value) {
int arr_2[max];
int low = INT_MAX;
int highest = INT_MIN;
for(int i = 0; i < size; i++) {
int temp = arr[i][0];
arr_2[temp] = arr_2[temp] + 1;
int temp_2 = arr[i][1];
arr_2[temp_2 + 1] = arr_2[temp_2 + 1] - 1;
if(temp < low) { low = temp; }
if(temp_2 > highest) { highest = temp_2; }
}
for (int i = low; i <= highest; i++) {
arr_2[i] = arr_2[i] + arr_2[i - 1];
}
return arr_2[value];
}
int main() {
int arr[4][2] = { { 3, 20 }, { 2, 13 }, { 25, 30 }, { 15, 40 } };
int size = sizeof(arr) / sizeof(arr[0]);
int value = 28;
cout << "প্রদত্ত মানের মধ্যে কোন ইন্টারভালগুলো আছে সেটির সংখ্যা: " << intervals_values(arr, size, value);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
প্রদত্ত মানের মধ্যে কোন ইন্টারভালগুলো আছে সেটির সংখ্যা: 18830628