Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में बाइनरी इंडेक्स्ड ट्री का उपयोग करके अधिकतम योग बढ़ता उपअनुक्रम

समस्या विवरण

इस समस्या में, हमें N तत्वों की एक सरणी arr[] दी गई है। हमारा कार्य C++ में बाइनरी इंडेक्स्ड ट्री का उपयोग करके अधिकतम योग बढ़ते उपअनुक्रम को खोजने के लिए एक प्रोग्राम बनाना है।

उदाहरण

इनपुट

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

आउटपुट

13

व्याख्या

अधिकतम बढ़ता उपअनुक्रम 1, 2, 3, 7 है। योग = 13

समाधान दृष्टिकोण

समस्या को हल करने के लिए, हम बाइनरी इंडेक्स्ड ट्री का उपयोग करेंगे जिसमें हम मान डालेंगे और उन्हें बाइनरी इंडेक्स्ड ट्री में मैप करेंगे। फिर अधिकतम मान ढूंढें।

C++ कार्यान्वयन

#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 subsequence using Binary Indexed Tree is 19
  1. C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम ढूंढेगा।बाइनरी ट्री का स्पाइरल सम  बाइनरी ट्री के स्पाइरल ट्रैवर्सल में मिलने वाले नोड्स का योग है।ट्री के स्पाइरल ट्रैवर्सल में, नोड्स को रूट से लीफ नोड तक ट्रैवर्स कि

  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें प्रत्येक नोड एक मान रखता है। हमारा कार्य बाइनरी ट्री के दो पत्तों के बीच अधिकतम पथ योग ढूंढने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक पत्ते नोड से दूसरे पत्ते नोड तक का पथ ढूंढना है जो मानों का अधिकतम योग प्रदान करेगा। यह अधिकतम योग पथ रूट न

  1. बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री है। कार्य वर्टिकल ऑर्डर ट्रैवर्सल में सभी नोड्स के योग के अधिकतम को प्रिंट करना है। तो यदि ट्री नीचे जैसा है - वर्टिकल ऑर्डर ट्रैवर्सल इस तरह है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग खोज