কম্পিউটার টিউটোরিয়াল

C++-এ কোয়েরি: Nটি L-R রেঞ্জে একটি সংখ্যা আছে কিনা


এই সমস্যায়, আমাদের Nটি রেঞ্জ [L, R] এবং Q কোয়েরি দেওয়া আছে যারা প্রতিটি একটি সংখ্যা val ধারণ করে। আমাদের কাজ হল একটি সংখ্যা Nটি L-R রেঞ্জের মাঝপথে আছে কিনা চেক করার কোয়েরি সমাধান করার প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা

আমাদের Nটি [L, R] টাইপের রেঞ্জ দেওয়া আছে যেগুলো L থেকে R পর্যন্ত ইন্টিজার ভ্যালু ধারণ করে, উদাহরণস্বরূপ রেঞ্জ [3, 6] 3,4,5,6 ধারণ করে। প্রতিটি কোয়েরিতে একটি val দেওয়া থাকে যার উপস্থিতি চেক করতে হবে। প্রোগ্রামটি true ফেরত দেবে যদি val যেকোনো একটি রেঞ্জে থাকে, অন্যথায় false।

উদাহরণ দিয়ে বোঝা যাক

ইনপুট: ranges[N] = {{2, 4}, {6,7}, {9, 12}}

Q = 3

Query = {1, 7, 10}

আউটপুট: Not Present, Present, Present

ব্যাখ্যা

কোয়েরি ১: সংখ্যা ১ কোনো রেঞ্জে নেই।

কোয়েরি ২: সংখ্যা ৭ রেঞ্জ {6, 7}-এ আছে।

কোয়েরি ৩: সংখ্যা ১০ রেঞ্জ {9, 12}-এ আছে।

সমাধান পদ্ধতি

val যেকোনো রেঞ্জে আছে কিনা চেক করতে হবে, তাই val-কে সব রেঞ্জের সাথে চেক করতে হবে। এর জন্য একটি হ্যাশম্যাপ ব্যবহার করা যেতে পারে। রেঞ্জের L এবং R আলাদা করে স্টোর করে এবং বাইনারি সার্চ অ্যালগরিদম দিয়ে সার্চ করা সমাধানটিকে সহজ করবে।

C++ প্রোগ্রাম উদাহরণ

#include <bits/stdc++.h>
using namespace std;

vector<int> v;
unordered_map<int, int> mpp;

void initialiseMap(int a[][2], int n){
    for (int i = 0; i < n; i++) {
        v.push_back(a[i][0]);
        mpp[a[i][0]] = 1;
        v.push_back(a[i][1]);
        mpp[a[i][1]] = 2;
    }
    sort(v.begin(), v.end());
}

bool isElementPresent(int val) {
    int ind = lower_bound(v.begin(), v.end(), val) - v.begin();
    if (v[ind] == val)
        return true;
    else {
        if (mpp[v[ind]] == 2)
            return true;
        else
            return false;
    }
}

int main(){
    int arr[][2] = {{2, 4}, {6,7}, {9, 12}};
    int n = 3;
    int Q = 3;
    int query[] = { 1, 7, 10 };
    initialiseMap(arr, n);
    for(int i = 0; i < Q; i++){
        cout<<"For Query "<<(i+1);
        if(isElementPresent(query[i]))
            cout<<": The given digit "<<query[i]<<" is present in one of the given ranges\n";
        else
            cout<<": The given digit "<<query[i]<<" is not present in any of the given ranges\n";
    }
    return 0;
}

আউটপুট

For Query 1: The given digit 1 is not present in any of the given ranges
For Query 2: The given digit 7 is present in one of the given ranges
For Query 3: The given digit 10 is present in one of the given ranges
  1. C++-এ একটি অ্যারে পেয়ারওয়াইজ সর্টেড (pairwise sorted) কিনা তা যাচাই করা

  2. C++-এ একটি বৃত্ত অন্য বৃত্তের ভিতরে আছে কিনা তা যাচাই করা

  3. C++ প্রোগ্রাম: মিস্টেরি নাম্বার (Mystery Number) চেক করা

  4. C++ প্রোগ্রাম: DFS ব্যবহার করে বাইপার্টাইট গ্রাফ যাচাই