এই সমস্যায়, আমাদেরকে N আকারের একটি অ্যারে রেস[] দেওয়া হয়েছে। আমাদের কাজ হল রেঞ্জ যোগ কোয়েরির পরে প্রদত্ত অ্যারে থেকে প্রাথমিক অ্যারে খুঁজে বের করা।
আমাদের প্রারম্ভিক অ্যারেটি খুঁজে বের করতে হবে যা এটিতে [s, e, val] কোয়েরি সম্পাদন করার সময় অ্যারে rel[] ফিরিয়ে দেবে৷
প্রতিটি [s, e, val] কোয়েরি
হিসাবে সমাধান করা হয়s -> প্রারম্ভিক সূচক
e -> শেষ সূচক
val -> অ্যারেতে 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