k-th ordinal statistics
You need to find all k-th ordinal statistics in the range from k1 to k2 inclusive . The input is the size of the array n k1 and k2 interval boundaries The numbers a, b, c for which the following array elements a1 and a2 will be generated are the 0th and 1st elements of the array
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;
void quick_sort(signed long int *a, int left, int right, int k1, int k2) {
// функция поиска k-той статистики на основе быстрой сортировки
if (left == right) return;
if (k2 >= left && k1 <= right) {
int i = left;
int j = right;
signed long int piv = a[(left + right) / 2];
while (i <= j) {
while (a[i] < piv) ++i;
while (a[j] > piv) --j;
if (i <= j) {
signed long int temp = a[i];
a[i] = a[j];
a[j] = temp;
++i;
--j;
}
}
if (left < j) quick_sort(a, left, j, k1, k2);
if (i < right) quick_sort(a, i, right, k1, k2);
}
}
int main()
{
ifstream in;
in.open("input.txt");
ofstream out;
out.open("output.txt");
int n, k1, k2, a, b, c, a1, a2;
in >> n >> k1 >> k2;
in >> a >> b >> c >> a1 >> a2;
k1--; k2--;
signed long int *arr = new signed long int[n];
arr[0] = a1;
arr[1] = a2;
int l = k1, r = k2; // инициализация всего
if (n > 2) {
while (l <= n) {
if (double(log2(abs(a*arr[l - 2] + b * arr[l - 1] + c))) <= 32) {
arr[l] = a * arr[l - 2] + b * arr[l - 1] + c;
l++;
} // генерация новых элементов массива
}
}
quick_sort(arr, 0, n - 1, k1, k2);
for (int i = k1; i <= k2; i++) {
if (double(log2(abs(arr[i]))) <= 32) {
out << arr[i] << " "; // вывод
}
}
in.close();
out.close();
}
написал такой код. Все хорошо работает, но не корректно работает на отрезке от 1 до 3
Не могу понять что не правильно сделал
помогите уже 3-ий день сижу над этим
0