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

C++-তে K সংখ্যক কনসিকিউটিভ সাব-অ্যারে থেকে মিনিমামের মধ্যে সর্বোচ্চ মান বের করা


টাস্ক হলো একটি অ্যারে arr[]-কে K সংখ্যক কনসিকিউটিভ সাব-অ্যারে-এ ভাগ করে, সাব-অ্যারেগুলোর মিনিমাম মানগুলোর মধ্যে সর্বোচ্চ মান বের করা।

ইনপুট

arr[] = {2, 8, 4, 3, 9, 1, 5}, K=3

আউটপুট

9

ব্যাখ্যা − ৩টি কনসিকিউটিভ সাব-অ্যারে: {2,8,4,3}, {9}, {1,5}। মিনিমাম মানগুলো: ২, ৯, ১। সর্বোচ্চ: ৯।

ইনপুট

arr[] = {8, 4, 1, 9, 11}, K=1

আউটপুট

11

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • টাস্কটিকে ৩ কেসে ভাগ করা যায়: K=1, K=2, K>=3।
  • K=1: সাব-অ্যারে হলো পুরো অ্যারে, তাই অ্যারের মিনিমাম মানই আউটপুট।
  • K=2: কঠিন কেস। প্রিফিক্স এবং সাফিক্স মিনিমাম অ্যারে বানানো লাগে। প্রতিটি পজিশনে MaxValue = max(MaxValue, max(prefixMin[i], suffixMin[i+1])) ক্যালকুলেট করুন।
  • K>=3: সর্বোচ্চ মানই আউটপুট (কারণ আমরা সর্বোচ্চ এলিমেন্টকে একা একটি সাব-অ্যারে হিসেবে রাখতে পারি)।

উদাহরণ

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

int Max(const int* arr, int size, int K) {
    int Max = INT_MIN;
    int Min = INT_MAX;
    for (int i = 0; i < size; i++) {
        Min = min(Min, arr[i]);
        Max = max(Max, arr[i]);
    }
    if (K == 1) return Min;
    else if (K >= 3) return Max;
    else {
        // K == 2
        vector Left(size), Right(size);
        Left[0] = arr[0];
        Right[size-1] = arr[size-1];
        for (int i = 1; i < size; i++)
            Left[i] = min(Left[i-1], arr[i]);
        for (int i = size-2; i >= 0; i--)
            Right[i] = min(Right[i+1], arr[i]);
        int MaxValue = INT_MIN;
        for (int i = 0; i < size-1; i++)
            MaxValue = max(MaxValue, max(Left[i], Right[i+1]));
        return MaxValue;
    }
}

int main() {
    int arr[] = {9, 4, 12, 5, 6, 11};
    int size = sizeof(arr)/sizeof(arr[0]);
    int K = 2;
    cout << "Maximize the maximum among minimum of K consecutive sub-arrays is: " << Max(arr, size, K);
    return 0;
}

আউটপুট

Maximize the maximum among minimum of K consecutive sub-arrays is: 11
  1. C++-এ অ্যারে-এর বিটওয়াইজ OR সর্বাধিক করা

  2. C++-এ অ্যারেতে সর্বোচ্চ গুণফল দায়ক কোয়াড্রুপল (Quadruple) নির্ণয়

  3. C++-এ সব সম্ভাব্য সাব-অ্যারে থেকে ন্যূনতম LCM এবং GCD

  4. সি++ প্রোগ্রাম: গ্রাফের ম্যাক্সিমাম কাট (Maximum Cut) বের করা