Pagini recente » Cod sursa (job #728153) | Cod sursa (job #1627518) | Cod sursa (job #390270) | Cod sursa (job #1923178) | Cod sursa (job #965610)
Cod sursa(job #965610)
#include<fstream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int Nmax = 3000009;
int N; int K; int H[Nmax];
void Read(){
fin >> N >> K;
for(int i = 1; i <= K; ++i)
fin >> H[i];
}
void BuildHeap(){
for(int i = 1; i <= K; ++i){
int j = i;
while((j >> 1) && H[j] > H[j >> 1]){
swap(H[j], H[j >> 1]);
j >>= 1;
}
}
}
void Percalate(int Pos){
int NextPos = Pos;
if( (Pos << 1) <= K && H[Pos << 1] > H[NextPos]) NextPos = (Pos << 1);
if( (Pos << 1) + 1 <= K && H[ (Pos << 1) + 1] > H[NextPos]) NextPos = (Pos << 1) + 1;
if(NextPos != Pos){
swap(H[Pos], H[NextPos]);
Percalate(NextPos);
}
}
void DoTheRest(){
for(int i = 1; i <= N - K; ++i){
int X; fin >> X;
if(H[1] > X){
H[1] = X; Percalate(1);
}
}
}
int main(){
Read (); BuildHeap (); DoTheRest(); fout << H[1];
return 0;
}