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

সাবঅ্যারে পর্বত আকারে (mountain form) আছে কিনা যাচাই করা (C++)


সমস্যা বিবরণ

একটি পূর্ণসংখ্যা অ্যারে এবং একটি রেঞ্জ দেওয়া হয়েছে। আমাদের কাজ হল সেই রেঞ্জের সাবঅ্যারে পর্বত আকারে (প্রথম বেড়ে পরে কমে) আছে কিনা তা যাচাই করা।

উদাহরণ

ইনপুট: arr[] = {1, 4, 2, 5, 6, 7, 3, 0}, রেঞ্জ = [2, 7]
আউটপুট: Yes
ব্যাখ্যা: সাবঅ্যারে = {2, 5, 6, 7, 3, 0} — মান প্রথমে বেড়েছে, পরে কমেছে।

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

প্রতিটি উপাদানের জন্য বাম ও ডান পাশে সর্বোচ্চ বেড়ে ও কমে যাওয়ার সূচক সংরক্ষণ করে রেঞ্জ যাচাই করা।

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

#include <iostream>
using namespace std;

void processArray(int arr[], int N, int left[], int right[]) {
    left[0] = 0;
    int inc = 0;
    for (int i = 1; i < N; i++) {
        if (arr[i] > arr[i-1]) inc = i;
        left[i] = inc;
    }
    right[N-1] = N-1;
    int dec = N-1;
    for (int i = N-2; i >= 0; i--) {
        if (arr[i] > arr[i+1]) dec = i;
        right[i] = dec;
    }
}

bool isMountainSubArray(int arr[], int left[], int right[], int L, int R) {
    return (right[L] >= left[R]);
}

int main() {
    int arr[] = {2, 3, 2, 4, 4, 6, 3, 2};
    int N = sizeof(arr)/sizeof(int);
    int left[N], right[N];
    processArray(arr, N, left, right);
    int L = 0, R = 2;
    if (isMountainSubArray(arr, left, right, L, R))
        cout << "সাবঅ্যারে পর্বত আকারে আছে";
    else
        cout << "সাবঅ্যারে পর্বত আকারে নেই";
    return 0;
}

আউটপুট

সাবঅ্যারে পর্বত আকারে আছে
  1. C++-এ সাবঅ্যারে XOR কুয়েরি

  2. C++-এ Subarray Sum Equals K

  3. স্ট্রিক্টলি ইনক্রিজিং সাব-অ্যারের সর্বোচ্চ যোগফল বের করা C++-তে

  4. C++ প্রোগ্রাম: দুই নোডের মধ্যে পাথ আছে কিনা চেক করা