Pagini recente » Cod sursa (job #1309286) | Cod sursa (job #1006613) | Cod sursa (job #2181651) | Cod sursa (job #2356060) | Cod sursa (job #3291529)
#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;
}