Даны два массива целых чисел одинаковой длины A[0..n−1]
и B[0..n−1]
.
Необходимо найти первую пару индексов i0
и j0
, i0≤j0
, такую что A[i0]+B[j0]=max{A[i]+B[j]}
, где 0≤i<n,0≤j<n,i≤j
.
Время работы – O(n)
.
Ограничения:
1≤n≤100000,
0≤A[i]≤100000,
0≤B[i]≤100000
для любого i.
оригинал задания https://stepik.org/lesson/12556/step/3?course=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B-%D0%B8-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&unit=2984
как сделать именно О(n) в данном алгоритме.
#include <iostream>
#include <climits>
#include <cassert>
void read_line(int arr[], int count, int& maxNumber, int& indexOfMax)
{
for (int i = 0; i < count; i++)
{
std::cin >> arr[i];
if (arr[i] > maxNumber)
{
maxNumber = arr[i];
indexOfMax = i ;
}
}
}
int main(int argc, char** argv)
{
unsigned int count = 0;
std::cin >> count;
#define NDEBUG // в начале файла исходного кода, перед включением заголовочного файла
assert(count > 0);
int* arrA = new int[count];
int* arrB = new int[count];
int maxA = INT_MIN, maxB = INT_MIN, maxAB = INT_MIN;
int indexA = -1, indexB = -1;
read_line(arrA, count, maxA, indexA);
read_line(arrB, count, maxB, indexB);
maxA = arrA[0];
indexA = 0;
int prevB = arrB[0];
indexB = 0;
maxAB = maxA + prevB;
for (int i = 1; i < count ; i++)
{
int currentSum = arrB[i];
currentSum += (maxA < arrA[i] ? arrA[i] : maxA);
//std::cout<< currentSum<< " maxA " << maxA<< " indB " << indexB<<"\n";
if ((maxAB < currentSum) && (arrB[indexB] <= i))
{
if ((arrA[i] > maxA))
{
maxA = arrA[i];
indexA = i;
//indexB = i;
}
indexB = i;
maxAB = currentSum;
}
}
if ((indexA >= 0) || (indexB >= 0))
std::cout << indexA << " " << indexB;
delete[] arrA;
delete[] arrB;
return 0;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть вектор целых чиселНужно только с помощью стандартных алгоритмов STL заменить каждый пятый элемент на 0
Доброго времени суток, помогите решить задачуСделал скрипт на лендинге который по кнопке отправляет товар к корзину
Добрый деньНужно сделать анимацию, что бы при наведении на блок поднималась нижняя полоска заливая его фоном
Для ссылки определен стиль, как отменить его только для этого элемента?