কম্পিউটার

C++ এ বাইনারি ইনডেক্সড ট্রি ব্যবহার করে সর্বাধিক যোগফল বৃদ্ধি


এই সমস্যায়, আমাদেরকে N উপাদানগুলির একটি অ্যারে [] দেওয়া হয়েছে। আমাদের কাজ হল C++ এ বাইনারি ইনডেক্সড ট্রি ব্যবহার করে সর্বাধিক যোগফল বর্ধিত অনুক্রম খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

arr[] = {4, 1, 9, 2, 3, 7}

আউটপুট

13

ব্যাখ্যা

সর্বাধিক ক্রমবর্ধমান অনুক্রম হল 1, 2, 3, 7। যোগফল =13

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

সমস্যা সমাধানের জন্য, আমরা Binary Indexed Tree ব্যবহার করব যেখানে আমরা মান সন্নিবেশ করব এবং সেগুলোকে বাইনারি ইনডেক্সড ট্রিতে ম্যাপ করব। তারপর সর্বোচ্চ মান খুঁজুন।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include <bits/stdc++.h>
using namespace std;
int calcMaxSum(int BITree[], int index){
   int maxSum = 0;
   while (index > 0){
      maxSum = max(maxSum, BITree[index]);
      index -= index & (-index);
   }
   return maxSum;
}
void updateBIT(int BITree[], int newIndex, int index, int val){
   while (index <= newIndex){
      BITree[index] = max(val, BITree[index]);
      index += index & (-index);
   }
}
int maxSumIS(int arr[], int n){
   int index = 0, maxSum;
   map<int, int> arrMap;
   for (int i = 0; i < n; i++){
      arrMap[arr[i]] = 0;
   }
   for (map<int, int>::iterator it = arrMap.begin(); it != arrMap.end(); it++){
      index++;
      arrMap[it->first] = index;
   }
   int* BITree = new int[index + 1];
   for (int i = 0; i <= index; i++){
      BITree[i] = 0;
   }
   for (int i = 0; i < n; i++){
      maxSum = calcMaxSum(BITree, arrMap[arr[i]] - 1);
      updateBIT(BITree, index, arrMap[arr[i]], maxSum + arr[i]);
   }
   return calcMaxSum(BITree, index);
}
int main() {
   int arr[] = {4, 6, 1, 9, 2, 3, 5, 8};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The Maximum sum increasing subsequence using Binary Indexed Tree is "<<maxSumIS(arr, n);
   return 0;
}

আউটপুট

The Maximum sum increasing subsquence using Binary Indexed Tree is 19

  1. C++ এ বাইনারি ট্রিতে সর্বোচ্চ BST যোগফল

  2. C++ এ বাইনারি ট্রিতে সর্বাধিক সর্পিল যোগফল

  3. C++ এ একটি বাইনারি ট্রিতে সর্বাধিক পথের যোগফল

  4. C++ এ বাইনারি ট্রিতে সর্বোচ্চ উল্লম্ব যোগফল খুঁজুন