इस समस्या में, हमें आकार N का एक सरणी res[] दिया जाता है। हमारा कार्य श्रेणी योग प्रश्नों के बाद दिए गए सरणी से प्रारंभिक सरणी ढूंढना है।
हमें उस प्रारंभिक सरणी को खोजने की आवश्यकता है जो उस पर [s, e, val] क्वेरी करने पर सरणी rel[] लौटाएगी।
प्रत्येक [s, e, val] क्वेरी को
. के रूप में हल किया जाता हैs -> प्रारंभिक अनुक्रमणिका
ई -> एंडिंग इंडेक्स
वैल -> सरणी में s से e तक प्रत्येक तत्व में जोड़ा जाने वाला अद्यतन मान।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : rel[] = {7, 4, 8} Query[][] = {{1, 2, 1}, {0, 1, 3}} Output : {4, 0, 7}
स्पष्टीकरण -
initialArray = {4, 0, 7}; query = {1, 2, 1}; finalArray = {4, 1, 8} initialArray = {4, 1, 8}; query = {0, 1, 3}; finalArray = {7, 4, 8}
समाधान दृष्टिकोण
समस्या का एक सरल समाधान सभी प्रश्नों का पता लगाना है, क्योंकि सभी प्रश्नों को हल करने के तरीके का उपयोग करके उन्हें हल किया जाता है, फिर अंत में पाए गए सरणी को वापस कर दिया जाता है। यहां, प्रारंभिक ऐरे को खोजने के लिए, हमें इसे विपरीत तरीके से संचालित करने की आवश्यकता है, अर्थात इसे दिए गए सरणी से घटाएं।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <iostream> using namespace std; void calcInitialArrayQueries(int arr[], int n, int query[][3], int q) { for (int i = 0; i < q; i++) { for (int j = query[i][0];j <= query[i][1]; j++) { arr[j] = arr[j] - query[i][2]; } } for (int i = 0; i < n; i++) cout<<arr[i]<<" "; } int main() { int arr[] = { 5, 1, 8, 2, 9}; int n = sizeof(arr) / sizeof(arr[0]); int query[][3] = { {0, 2, -2}, {1, 4, 3}}; int q = sizeof(query) / sizeof(query[0]); cout<<"Initial array : "; calcInitialArrayQueries(arr, n, query, q); return 0; }
आउटपुट
Initial array : 7 0 7 -1 6