#include <iostream>
using namespace std;
#include <vector>
#include <deque>
#include <sstream>
int main() {
//单调双端队列,维护一个单调递减的队列,每次新元素p从队尾入队,将队列中小于p的元素全部从队尾出队
//当剩余最后k个元素时,每进行一次入队操作后,就弹出队首元素加入答案中
vector<int> players;
string line;
getline(cin,line);
stringstream ss(line);
int num=0;
while(ss >> num)
{
players.push_back(num);
}
//输入错误
if(!ss.eof())
{
cout << "error";
return 0;
}
int k=0;
cin >> k;
//遍历原数组,维护一个单调队列
int len = players.size();
deque<int> best;
for(int i=0; i<len; i++)
{
int p=players[i];
//将新元素p入队,同时弹出队列中所有小于p的元素
while( !best.empty() && best.back() < p)
{
best.pop_back();
}
best.push_back(p);
//如果此时剩余元素小于k,则弹出队首元素加入答案
if(len-1-i < k)
{
cout << best.front() << ' ';
best.pop_front();
}
}
return 0;
}
// 64 位输出请用 printf("%lld")