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

सी ++ में एम श्रेणी वृद्धि संचालन के बाद एक सरणी में अधिकतम मूल्य

इस समस्या में, हमें 0 से आरंभिक N तत्वों का एक सरणी arr[] दिया जाता है। हमारा कार्य C++ में m श्रेणी वृद्धि संचालन के बाद किसी सरणी में अधिकतम मान खोजने के लिए एक प्रोग्राम बनाना है।

समस्या का विवरण

ऐरे पर, हम प्रकार का m रेंज इंक्रीमेंट ऑपरेशन करेंगे,

अद्यतन [एल, आर, के] =श्रेणी के सभी तत्वों के लिए मूल्य के जोड़ें।

सरणी पर m संचालन करने के बाद। हमें ऐरे में अधिकतम मान वाले तत्व को खोजने की आवश्यकता है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

N = 6, m = 4
Update[][] = {{1, 4, 12}, {0, 3, 5}, {1, 5, 7}, {3, 5, 10}}

आउटपुट

34

स्पष्टीकरण

arr[] = {0, 0, 0, 0, 0, 0}
Update 1 {1, 4, 12} : arr[] = {0, 12, 12, 12, 12, 0}
Update 2 {0, 3, 5} : arr[] = {5, 17, 17, 17, 12, 0}
Update 3 {1, 5, 7} : arr[] = {5, 24, 24, 24, 19, 7}
Update 4 {3, 5, 10} : arr[] = {5, 24, 24, 34, 29, 17}

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

समस्या को हल करने का एक सरल तरीका केवल सरणी के मानों को अपडेट करना और फिर सभी ऑपरेशन किए जाने के बाद है। सरणी का अधिकतम तत्व खोजें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,

#include<iostream>
using namespace std;

int findmax(int arr[], int N){
   int maxVal = 0;
   for(int i = 0; i < N; i++){
      if(maxVal < arr[i]){
         maxVal = arr[i];
      }
   }
   return maxVal;
}
void updateVal(int arr[], int L, int R, int K){
   for(int i = L; i <= R; i++ ){
      arr[i] += K;
   }
}
int main(){
   int N = 5;
   int arr[N] = {0};
   int M = 4;
   int rangeIncOperation[M][3] = {{1, 4, 12}, {0, 3, 5}, {1, 5, 7}, {3, 5, 10}};
   for(int i = 0; i < M; i++){
      updateVal(arr, rangeIncOperation[i][0], rangeIncOperation[i][1], rangeIncOperation[i][2]);
   }
   cout<<"The maximum value in the array after "<<M<<" range increment operations is "<<findmax(arr, N);
   return 0;
}

आउटपुट

The maximum value in the array after 4 range increment operations is 34

यह ऑपरेशन अच्छा है लेकिन ऑर्डर O(m*N) की जटिलता बनाने वाली प्रत्येक क्वेरी के लिए सीमा पर पुनरावृति करता है।

प्रत्येक श्रेणी वृद्धि संचालन के लिए K को L में जोड़ना और R+1 से K घटाना एक बेहतर तरीका है। और फिर सबसे बड़ा मैक्सिमा मान पाएं यानी सरणी में प्रत्येक मान के लिए योग मान अपडेट करें और ऑपरेशन में हुआ अधिकतम मान पाएं।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,

#include<iostream>
using namespace std;

int FindMaximum(int a, int b){
   if(a > b)
      return a;
      return b;
   }
int findmax(int arr[], int N){
   int maxVal = 0;
   int sum = 0;
   for(int i = 0; i < N; i++){
      sum += arr[i];
      maxVal = FindMaximum(maxVal, sum);
   }
   return maxVal;
}
void updateVal(int arr[], int L, int R, int K){
   arr[L] += K;
   arr[R+1] -= K;
}
int main(){
   int N = 5;
   int arr[N] = {0};
   int M = 4;
   int rangeIncOperation[M][3] = {{1, 4, 12}, {0, 3, 5}, {1, 5, 7}, {3, 5, 10}};
   for(int i = 0; i < M; i++){
      updateVal(arr, rangeIncOperation[i][0], rangeIncOperation[i][1], rangeIncOperation[i][2]);
   }
   cout<<"The maximum value in the array after "<<M<<" range increment operations is "<<findmax(arr, N);
   return 0;
}

आउटपुट

The maximum value in the array after 4 range increment operations is 34

  1. C++ में K निषेध के बाद सरणी योग को अधिकतम करें

    समस्या कथन आकार n और एक संख्या k की एक सरणी को देखते हुए। हमें एक सरणी k को कई बार संशोधित करना होगा। संशोधित सरणी का अर्थ है कि प्रत्येक ऑपरेशन में हम किसी भी सरणी तत्व arr [i] को अस्वीकार करके प्रतिस्थापित कर सकते हैं यानी arr [i] =-arr [i]। कार्य इस ऑपरेशन को इस तरह से निष्पादित करना है कि k सं

  1. C++ में किसी सरणी को हटाने के लिए आवश्यक न्यूनतम संचालन

    विवरण N . की एक सरणी को देखते हुए पूर्णांक जहाँ N एक सम संख्या है। सरणी पर दो प्रकार के संचालन की अनुमति है। सरणी के किसी भी तत्व का मान 1 से बढ़ाएँ। यदि सरणी में दो आसन्न तत्व लगातार अभाज्य संख्या हैं, तो दोनों तत्वों को हटा दें। कार्य सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम संख्या मे

  1. C++ में किसी सरणी में सबसे छोटे मान की आवृत्ति ज्ञात कीजिए

    यहां हम देखेंगे कि किसी सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लीजिए कि सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहाँ सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। तो आउटपुट 4 है । इसे हल करने के लिए हमें सूची का सबसे छोटा तत्व मिलेगा, फिर हम पहली संख्याओं की घटनाओं