Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm Mảng ban đầu từ mảng đã cho sau các truy vấn tổng phạm vi trong C ++

Trong bài toán này, chúng ta được cung cấp một mảng res [] có kích thước N. Nhiệm vụ của chúng ta là tìm Mảng ban đầu từ mảng đã cho sau các truy vấn tổng phạm vi.

Chúng ta cần tìm mảng bắt đầu sẽ trả về mảng rel [] khi thực hiện truy vấn [s, e, val] trên đó.

Mỗi truy vấn [s, e, val] được giải quyết dưới dạng

s -> chỉ mục bắt đầu

e -> chỉ mục kết thúc

val -> cập nhật giá trị được thêm vào từng phần tử từ s đến e trong mảng.

Hãy lấy một ví dụ để hiểu vấn đề,

 Đầu vào:rel [] ={7, 4, 8} Truy vấn [] [] ={{1, 2, 1}, {0, 1, 3}} Đầu ra:{4, 0, 7}  

Giải thích -

 initialArray ={4, 0, 7}; truy vấn ={1, 2, 1}; finalArray ={4, 1, 8} initialArray ={4, 1, 8}; truy vấn ={0, 1, 3}; finalArray ={7, 4, 8} 

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là duyệt qua tất cả các truy vấn, đối với tất cả các truy vấn sẽ giải quyết chúng bằng cách chúng tôi giải quyết nó, sau đó trả về mảng được tìm thấy ở cuối. Ở đây, để tìm ra InitialArray, chúng ta cần vận hành nó theo cách ngược lại, tức là trừ nó khỏi mảng đã cho.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi

 #include  using namespace std; void calcInitialArrayQueries (int arr [], int n, int query [] [3], int q) {for (int i =0; i  

Đầu ra

 Mảng ban đầu:7 0 7 -1 6