इस समस्या में, हमें एक सरणी arr[] और एक पूर्णांक M दिया गया है। हमारा कार्य C++ में एक प्रोग्राम बनाना है ताकि प्रत्येक एक्सेस के बाद अधिकतम घटने पर सरणी से अधिकतम मान ढूंढा जा सके।
समस्या विवरण
अधिकतम ढूंढने के लिए, हम सरणी से अधिकतम तत्व ढूंढेंगे और प्रत्येक पुनर्प्राप्ति के बाद इसे -1 से घटाएंगे, M बार।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: arr[] = {3, 6, 8, 9} M = 2
आउटपुट: 17
व्याख्या
पहली पुनरावृत्ति, अधिकतम = 9, योग = 9, अद्यतन सरणी = {3, 6, 8, 8}
दूसरी पुनरावृत्ति, अधिकतम = 8, योग = 9+8 = 17, अद्यतन सरणी = {3, 6, 7, 8}
समाधान दृष्टिकोण
एक सरल समाधान मैक्स हीप का उपयोग करना है जिसमें मैक्स तत्व रूट पर होगा। फिर रूट को पॉप करें, इसे 1 से घटाएं, फिर तत्व को फिर से डालें। यह पॉप और इंसर्ट M बार किया जाता है। प्रत्येक पॉप ऑपरेशन के लिए, हम तत्व को योग तत्व में जोड़ेंगे और M पुनरावृत्तियों के बाद योग प्रिंट करेंगे।
उदाहरण
#include <bits/stdc++.h> using namespace std; int getSum(int arr[], int N, int M) { int sumVal = 0; priority_queue<int> heap; for (int i = 0; i < N; i++) heap.push(arr[i]); while (M--) { int maximumVal = heap.top(); sumVal += maximumVal; heap.pop(); heap.push(maximumVal - 1); } return sumVal; } int main() { int arr[] = { 3, 6, 8, 9}; int M = 2; int N = sizeof(arr) / sizeof(arr[0]); cout<<"प्रत्येक एक्सेस के बाद अधिकतम घटने पर सरणी से अधिकतम है "<<getSum(arr, N,M); }
आउटपुट
प्रत्येक एक्सेस के बाद अधिकतम घटने पर सरणी से अधिकतम है 17