Cod sursa(job #3291532)

Utilizator CalinHanguCalinHangu CalinHangu Data 5 aprilie 2025 00:42:59
Problema Interclasari Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.01 kb
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #define int long long

    using namespace std;

    const char nl = '\n';
    const int NMAX = 5 * 1e6;

    class MinHeap {
    private:
        vector<int> heap;
        int size;

        void heapifyUp(int index) {
            int parent = (index - 1) / 2;
            if (index > 0 && heap[index] < heap[parent]) {
                swap(heap[index], heap[parent]);
                heapifyUp(parent);
            }
        }

        void heapifyDown(int index) {
            while (true) {
                int left = 2 * index + 1;
                int right = 2 * index + 2;
                int smallest = index;
                if (left < heap.size() && heap[left] < heap[smallest]) {
                    smallest = left;
                }
                if (right < heap.size() && heap[right] < heap[smallest]) {
                    smallest = right;
                }
                if (smallest == index) {
                    return;
                }

                swap(heap[index], heap[smallest]);
                index = smallest;
            }
        }
    public:
        MinHeap(int k) {
            size = k;
        }

        void push(int value) {
            if (heap.size() < size) {
                heap.push_back(value);
                heapifyUp(heap.size() - 1);
            } else if (value > heap.front()){
                heap.front() = value;
                heapifyDown(0);
            }
        }

        vector<int> getHeap() {
            return heap;
        }
    };

    signed main() {
        int n, k, A, B, C, D;
        cin >> n >> k >> A >> B >> C >> D;

        MinHeap heap(k);
        for (int i = 1; i < n; ++i) {
            int value = (B * A + C) % D;
            A = value;
            heap.push(A);
        }


        vector<int> ans = heap.getHeap();
        sort(ans.begin(), ans.end());

        for (int i = 0; i < k; ++i) {
            cout << ans[i] << ' ';
        }
        cout << nl;
        return 0;
    }