ধরা যাক একটি সর্টেড ইন্টিজার অ্যারে 'arr' দেওয়া আছে যার আকার n। আরেকটি অ্যারে 'query' দেওয়া আছে যার আকার q। প্রতিটি query মান arr-এ আছে কিনা তা জানাতে হবে। যদি থাকে তবে "Present" এবং এর ১-ভিত্তিক পজিশন প্রিন্ট করুন। যদি না থাকে তবে "Not present" এবং arr-এ query মান থেকে বড় ন্যূনতম মানের পজিশন প্রিন্ট করুন।
উদাহরণস্বরূপ, n=8, arr={1,2,3,4,7,9,12,15}, q=3, query={1,5,8} হলে আউটপুট:
Present 1 Not present 5 Not present 6
সমাধানের ধাপসমূহ
- arr-এর সব উপাদান একটি ভেক্টরে কপি করুন
- প্রতিটি query[i] এর জন্য:
- lower_bound ব্যবহার করে প্রথম '>= query[i]' এর ইন্ডেক্স idx বের করুন
- যদি values[idx] == query[i] হয়, তবে "Present " প্রিন্ট করুন
- অন্যথায় "Not present " প্রিন্ট করুন
- idx + 1 প্রিন্ট করুন (১-ভিত্তিক)
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
#include <vector> #include <iostream> using namespace std; void solve(int n, int arr[], int q, int query[]) { vector<int> values; for(int i = 0; i < n; i++){ values.push_back(arr[i]); } for(int i = 0; i < q; i++) { int idx = lower_bound (values.begin(), values.end(), query[i]) - values.begin(); if (values[idx] == query[i]) cout << "Present "; else cout << "Not present "; cout << idx + 1 << endl; } } int main() { int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15}; int query_arr[] = {1, 5, 8}; solve(8, input_arr, 3, query_arr); return 0; }ইনপুট (stdin)
int input_arr[] = {1, 2, 3, 4, 7, 9, 12, 15}; int query_arr[] = {1, 5, 8}; solve(8, input_arr, 3, query_arr);আউটপুট
Present 1 Not present 5 Not present 6