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

নন-ইনক্রিজিং সাবঅ্রে সংখ্যা গণনা C++-এ


একটি অ্যারে arr[] দেওয়া আছে যেটি পজিটিভ ইন্টিজার ধারণ করে। লক্ষ্য হলো কমপক্ষে দৈর্ঘ্য ১ বিশিষ্ট সেই সাবঅ্রেগুলোর সংখ্যা বের করা যারা নন-ইনক্রিজিং (non-increasing)। যদি arr[] = {1,3,2} হয় তবে সাবঅ্রেগুলো হবে: {1}, {2}, {3}, {3,2}। কাউন্ট = ৪।

ইনপুট

arr[] = {5,4,5}

আউটপুট

Count of number of non-increasing subarrays are: 7

ব্যাখ্যা

সাবঅ্রেগুলো: {5}, {4}, {5}, {5,4}

ইনপুট

arr[] = {10,9,8,7}

আউটপুট

Count of number of non-increasing subarrays are: 10

ব্যাখ্যা

সাবঅ্রেগুলো: {10}, {9}, {8}, {7}, {10,9}, {9,8}, {8,7}, {10,9,8}, {9,8,7}, {10,9,8,7}

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

এই পদ্ধতিতে আমরা এই fakt ব্যবহার করি যে যদি arr[]-এর ইন্ডেক্স i এবং j এর মধ্যে এলিমেন্টগুলো নন-ইনক্রিজিং না হয় তবে i থেকে j+1, j+2... i+j+n-1 পর্যন্ত কখনো নন-ইনক্রিজিং হবena। তাই সাবঅ্রের দৈর্ঘ্য বাড়িয়ে চলা হয় যতক্ষণ নন-ইনক্রিজিং থাকে। যদি কোনো ছোট এলিমেন্ট পাওয়া যায় arr[j] < arr[j-1] তবে len*(len+1)/2 (দৈর্ঘ্য len বিশিষ্ট নন-ইনক্রিজিং সাবঅ্রের সাবঅ্রে সংখ্যা) কাউন্টে যোগ করে দৈর্ঘ্য ১ রিসেট করা হয়।

  • ইন্টিজার অ্যারে arr[] নেওয়া হয়।
  • subarrays(int arr[], int size) ফাংশন অ্যারে এবং সাইজ নিয়ে নন-ইনক্রিজিং সাবঅ্রে কাউন্ট রিটার্ন করে।
  • ইনিশিয়াল কাউন্ট ০ এবং ছোট সাবঅ্রের দৈর্ঘ্য temp=1।
  • ফর লুপে arr[i+1] <= arr[i] হলে temp++ (সাবঅ্রে নন-ইনক্রিজিং)।
  • অন্যথায় (temp+1)*temp/2 কাউন্টে যোগ করে temp=1 রিসেট।
  • সব লুপ শেষে যদি temp>1 হয় তবে আবার (temp+1)*temp/2 যোগ করা হয় শেষ সাবঅ্রের জন্য।
  • count রিটার্ন।

উদাহরণ

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

int subarrays(int arr[], int size) {
    int count = 0;
    int temp = 1;
    for (int i = 0; i < size - 1; ++i) {
        if (arr[i + 1] <= arr[i]) {
            temp++;
        } else {
            count += (((temp + 1) * temp) / 2);
            temp = 1;
        }
    }
    if (temp > 1) {
        count += (((temp + 1) * temp) / 2);
    }
    return count;
}

int main() {
    int arr[] = {2, 6, 1, 8, 3};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Count of number of non-increasing subarrays are: " << subarrays(arr, size);
    return 0;
}

আউটপুট

Count of number of non-increasing subarrays are: 7

  1. OpenCV-এ C++ ব্যবহার করে চেহারার সংখ্যা গণনা করা

  2. OpenCV-এ C++ ব্যবহার করে মোট ফ্রেম সংখ্যা গণনা করা

  3. ফিবোনাচ্চি সংখ্যা যেন করা নোডের ওজন এবং X-এর যোগফল C++-এ

  4. সি++-এ আয়তক্ষেত্রে বর্গের সংখ্যা গণনা