k-тая порядковая статистика

нужно найти все k-тые порядковые статистики в интервале от k1 до k2 включительно на вход подается размер массива n k1 и k2 границы интервала Числа a, b, c по которым будут генерироваться следующие элементы массива a1 и a2 - 0-ой и 1-ый элементы массива

#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 шт):