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