Массив А, состоящий из N положительных целых чисел. Есть N × (N+1)/2
непустые непрерывные подмассивы массива A.
Мы должны подсчитать максимальный элемент, присутствующий во всех непрерывных подмассивах.
Для примера:Подсчет максимального элемента, присутствующего во всех непрерывных подмассивах
1 2 3
Subarray List :
[1]
[2]
[3]
[1,2]
[2,3]
[1,2,3]
Maximum Element :
[1]
[2]
[3]
[2]
[3]
[3]
Мой подход:
Использование Segment Tree
запроса Максимальный элемент, присутствующий в интервале
Код:
public static void get_max_freq(int a , int b , ArrayList<Long> freq ,ArrayList<Integer> P , int n , int[] A){
if(a>b) return;
int index = query(1,0,n, a, b, A); // Segment Tree O(Logn)
long temp = (index-a+1)*(b-index+1);
freq.add(temp);
P.add(A[index));
get_max_freq(a,index-1, freq, P, n, A);
get_max_freq(index+1, b, freq, P,n, A);
}
Я интересно мое решение является правильным, если элементы не уникальный в массиве.
Есть ли более быстрое и лучшее решение, чем это.
Если ваш код работает, но вы ищете улучшения, вы должны задать этот вопрос на http://codereview.stackexchange.com/ вместо SO. – Pshemo
Прежде чем отвечать, знайте, что это из онлайн-конкурса! –