Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับ Range Sum Queries โดยไม่มี Updates

เราต้องคำนวณผลรวมขององค์ประกอบจากดัชนี i ถึงดัชนี j คำสั่ง (queries) ที่ประกอบด้วยค่า i และ j จะถูก執行หลายครั้ง

Input: arr[] = {5, 6, 3, 4, 1}, i = 1, j = 3
Output: 13

คำอธิบาย

6 + 3 + 4 = 13
sum[] = {5, 6+5, 3+6+5, 4+3+6+5, 1+4+3+6+5}
sum[] = {5, 11, 14, 18, 19}
sum[j] - sum[i-1] = sum[3] - sum[0] = 18 - 5 = 13

ตรรกะพื้นฐานคือเริ่มลูปจากดัชนี i ถึง j และบวกองค์ประกอบระหว่างดัชนีเหล่านั้น แต่เราไม่สามารถเก็บในตัวแปรเพิ่มได้ ดังนั้นเราจะใช้อาร์เรย์อีกอันหนึ่งที่เราบวกองค์ประก้องอาร์เรย์กับองค์ประกอบสุดท้ายของอาร์เรย์ใหม่ไปเรื่อยๆ และจากดัชนี j เราจะลบค่าดัชนี i-1

ตัวอย่างโค้ด

#include <iostream>
using namespace std;

int rangeSum(int i, int j, int sum[]) {
    if (i == 0)
        return sum[j];
    return sum[j] - sum[i - 1];
}

int main() {
    int arr[] = {5, 6, 3, 4, 1};
    int n = 5;
    int sum[5];
    sum[0] = arr[0];
    for (int i = 1; i < n; i++) {
        sum[i] = arr[i] + sum[i - 1];
    }
    cout << rangeSum(1, 3, sum) << endl;
    return 0;
}

ผลลัพธ์

13