Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 m 범위 증가 작업 후 배열의 최대값

<시간/>

이 문제에서는 0으로 초기화된 N개 요소의 배열 arr[]이 제공됩니다. 우리의 임무는 C++에서 m 범위 증가 작업 후에 배열에서 최대값을 찾는 프로그램을 만드는 것입니다.

문제 설명

배열에서 유형의 m 범위 증가 작업을 수행합니다.

update[L, R, K] =범위의 모든 요소에 값 K를 추가합니다.

어레이에서 m 작업을 수행한 후. 배열에서 최대값을 가진 요소를 찾아야 합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

N =6, m =4업데이트[][] ={{1, 4, 12}, {0, 3, 5}, {1, 5, 7}, {3, 5, 10}} 

출력

34

설명

arr[] ={0, 0, 0, 0, 0, 0}업데이트 1 {1, 4, 12} :arr[] ={0, 12, 12, 12, 12, 0}업데이트 2 { 0, 3, 5} :arr[] ={5, 17, 17, 17, 12, 0}업데이트 3 {1, 5, 7} :arr[] ={5, 24, 24, 24, 19, 7 }업데이트 4 {3, 5, 10} :arr[] ={5, 24, 24, 34, 29, 17}

솔루션 접근 방식

문제를 해결하는 간단한 방법은 단순히 배열의 값을 업데이트한 다음 모든 작업이 완료된 후에 하는 것입니다. 배열의 최대 요소를 찾습니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include네임스페이스 std;int findmax(int ​​arr[], int N){ int maxVal =0; for(int i =0; i  

출력

4개의 범위 증가 작업 후 배열의 최대값은 34입니다.

이 작업은 좋지만 O(m*N) 순서의 복잡성을 만드는 각 쿼리의 범위를 반복합니다.

더 나은 접근 방식은 각 범위 증가 작업에 대해 L에 K를 더하고 R+1에서 K를 빼는 것입니다. 그런 다음 배열의 각 값에 대한 합계 값을 업데이트하고 작업에서 발생한 최대 값을 찾는 가장 큰 최대값을 찾습니다.

예시

솔루션의 작동을 설명하는 프로그램,

#include네임스페이스 사용 std;int FindMaximum(int a, int b){ if(a> b) return a; 리턴 b; }int findmax(int ​​arr[], int N){ int maxVal =0; 정수 합계 =0; for(int i =0; i  

출력

4 범위 증가 작업 후 배열의 최대값은 34입니다.