đề bài :
cho mảng a[n] số tự nhiên(3<= n <= 200000) , 1 số 1<= b <=50.
yêu cầu : kiểm tra xem có tồn tại phần tử thứ i scho max{a1,…,ai−1}−a[i] >= b và
max{ai+1,…,an}−ai >=b, nếu có tính giá trị :
max{a1,…,a[i−1]} - a[i] + max{a[i+1],…,an}−a[i]
VD cho mảng {3,5,4,7,2,5,4,6,9,8} và b=5 thì tại a[i]=2 có max{3,5,4,7} - 2 >=5 và
max{5,4,6,9,8}−2≥5.vì vậy in ra giá trị 7-2 + 9-2 = 12.
e làm theo cách tạo 2 mảng để tính 2 giá max phía bên phải và bên trái của phần tử thứ i tương ứng r nhưng mà đến khi test thì chỉ đúng trong một số case, mn có ai nghĩ ra case nào đặc biệt cho e biết để sửa code với ạ
#include<iostream>
using namespace std;
int main(){
int n;
int b;
cin>>n>>b;
int a[n];
for(int i = 0 ; i < n ; i++){
cin>>a[i];
}
int max1[n],max2[n];
max1[0]=a[0];
max2[n-1]=a[n-1];
for(int i = 1 ; i < n ; i++){
max1[i]=max1[i-1];
if(max1[i]<=a[i])max1[i]=a[i];
}
for(int i = n-2 ; i >= 0 ; i--){
max2[i] = max2[i+1];
if(max2[i]<a[i])max2[i]=a[i];
}
int test = -1;
for(int i = 1 ; i < n ; i++){
if((max1[i-1]-a[i] >=b)&&(max2[i+1]-a[i] >= b)){
test = max1[i-1]-a[i] + max2[i+1]-a[i];
}
}
cout<<test;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?