Witam!
mam takie zadanko:

Dany jest ciąg n liczb całkowitych oraz liczba d. Policz, ile jest takich par złożonych z elementów
ciągu, że ich iloczyn jest większy od d.
Wejście
Dwie liczby całkowite pierwszej linii to odpowiednio ilość elementów ciągu n oraz wartość d
(1 < n < 106, -109 < d < 10^9). W kolejnym wierszu znajduje się n liczb – wartości
elementów ciągu (liczby całkowite z zakresu <-109, 109>).
Wyjście
Jedna liczba oznaczająca ilość par.
Przykład
Dla danych wejściowych:
5 10
1 2 3 4 5
Poprawnym wynikiem jest:
3
Wyjaśnienie:
Parami spełniającymi warunek zadania są (3,4), (4,5) i (5,3).

Niby proste, ale muszę to zrobić chyba w czasie liniowym, ew n log n.
Mój kod:

#include <iostream>
#include <algorithm>

using namespace std;

int tab[1000001];

int main()
{
    long long int d, licz = 0;
    int n;;
    cin >> n >> d;
    for(int i=0; i<n; i++)
        cin >> tab[i];
    sort(tab, tab+n);
    for(int i=0; i<n; i++)
    {
        for(int j=i+1; j<n; j++)
        {
            if(tab[i] * tab[j] > d)
                licz++;
            else
                break;
        }
    }
        cout << licz;
    return 0;
} 

Nie mam pomysłu jakby to zrobić liniowo? Może ktoś podpowie?

Z góry dzięki
zaiks