Поскольку нам необходим доступ в O (1), необходимая структура данных будет требовать большого объема памяти.
При использовании таблицы хэширования в худшем случае для доступа потребуется O (n)
Мое решение:
Построить 2D матрицу.
array = {2,3,2,4,1,4,6} Диапазон чисел = от 0 до 6, поэтому n = 7
Итак, мы должны создать матрицу nxn.
array [i] [i] представляет общее количество элементов = i
, поэтому array [4] [4] = 2 (так как 4 появляется в массиве 2 раза)
array [5] [5]= 0
array [5] [2] = количество чисел>> = 2 и <= 5 = 5 </p>
//preprocessing stage 1: Would populate a[i][i] with total count of element = i
a[n][n]={0};
for(i=0;i<=n;i++){
a[i][i]++;
}
//stage 2
for(i=1;i<=n;i++)
for(j=0;j<i;j++)
a[i][j] = a[i-1][j] + a[i][i];
//we are just adding count of element=i to each value in i-1th row and we get ith row.
Теперь (5,2) будет запрашивать [5] [2] и даст ответ в O (1)