กำหนดอาร์เรย์ arr[m] ด้วยจำนวน m ของจำนวนเต็มและ n ซึ่งเป็นค่าที่จะเพิ่มในอาร์เรย์และการสืบค้น r จะมีจุดเริ่มต้นและจุดสิ้นสุด สำหรับแต่ละแบบสอบถาม เราต้องเพิ่มค่า n ตั้งแต่เริ่มต้นจนถึงสิ้นสุดขีดจำกัดในอาร์เรย์
ตัวอย่าง
Input: arr[] = {1, 2, 3, 4, 5} query[] = { { 0, 3 }, { 1, 2 } } n = 2 Output: If we run above program then it will generate following output: Query1: { 3, 4, 5, 6, 5 } Query2: { 3, 6, 7, 6, 5 }
โปรแกรมนี้สามารถแก้ไขได้ด้วยวิธีการง่าย ๆ ซึ่ง -
- เราจะทำซ้ำการสืบค้นข้อมูลทั้งหมดที่ทำการสำรวจอาร์เรย์โดยเริ่มจากจุดเริ่มต้นในแบบสอบถามและจนถึงจุดสิ้นสุดที่เก็บไว้ในแบบสอบถาม
- เพิ่มค่าของ n แล้วพิมพ์อาร์เรย์
อัลกอริทึม
START STEP 1 : DECLARE A STRUCT range for start AND end LIMITS STEP 2 : IN FUNCTION add_tomatrix(int arr[], struct range r[], int n, int size, int m) int i, j, k; LOOP FOR i = 0 AND i < m AND i++ LOOP FOR j = r[i].start AND j<= r[i].end AND j++ arr[j] = arr[j] + n END FOR LOOP FOR k = 0 AND k < size AND k++ PRINT arr[k] END FOR END FOR STOP
ตัวอย่าง
#include <stdio.h> struct range{ int start, end; //struct to give the range for the array elements }; int add_tomatrix(int arr[], struct range r[], int n, int size, int m){ int i, j, k; for ( i = 0; i < m; i++) //for all the elements in a struct we defined{ for(j = r[i].start; j<= r[i].end; j++) //from where till where we want our results to be updated{ arr[j] += n; //add the value of the particular range } printf("Query %d:", i+1); for ( k = 0; k < size; k++){ printf(" %d",arr[k]); // print the whole array after every query } printf("\n"); } } int main(int argc, char const *argv[]){ int arr[] ={3, 4, 8, 1, 10}; struct range r[] = {{0,2}, {1, 3}, {3, 4}}; int n = 2; int size = sizeof(arr)/sizeof(arr[0]); int m = sizeof(r)/sizeof(r[0]); add_tomatrix(arr, r, n, size, m); return 0; }
ผลลัพธ์
หากเราเรียกใช้โปรแกรมด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
Query 1: 5 6 10 1 10 Query 2: 5 8 12 3 10 Query 3: 5 8 12 5 12