//05-树7 堆中的路径
import java.util.Scanner;
class heap{
final int Max_Size = 1000;
final int Min_Data = -10000;
int[] elements= new int[Max_Size + 1];
int size = 0;
int capacity = Max_Size;
heap(){
this.elements[0] = Min_Data;
}
}
public class Main {
static void percdown(heap H, int p){
int x = H.elements[p];
int par, chi;
for(par = p; par * 2 < H.size; par = chi){
chi = 2 * par;
if((chi != H.size) && (H.elements[chi] > H.elements[chi + 1])){
chi ++;
}
if(x < H.elements[chi]){
break;
}
else{
H.elements[par] = H.elements[chi];
}
}
H.elements[par] = x;
}
static void buildMin(heap H){
int p = H.size / 2;
for(; p >= 1; p --){
percdown(H, p);
}
}
static void buildMin(int[] a, heap H){
int j;
for(int i = 0; i < a.length; i ++){
j = ++ H.size;
H.elements[j] = a[i];
for(;H.elements[j / 2] > a[i]; j /= 2){
H.elements[j] = H.elements[j / 2];
}
H.elements[j] = a[i];
}
}
static void printstack(heap H, int p){
while(p > 0){
if(p == 1){
System.out.print(H.elements[p]);
}
else{
System.out.print(H.elements[p] + " ");
}
p /= 2;
}
System.out.println();
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int M = s.nextInt();
int p;
int[] a = new int[N];
heap H = new heap();
for(int i = 0; i < N; i ++){
a[i] = s.nextInt();
//H.elements[i + 1] = a[i];
//H.size ++;
}
/*for(int i = 1; i < N + 1; i ++){
System.out.println(H.elements[i] + " ");
}
buildMin(H);
for(int i = 1; i < N + 1; i ++){
System.out.println(H.elements[i]);
}*/
buildMin(a, H);
for(int i = 0; i < M; i ++){
p = s.nextInt();
printstack(H, p);
}
}
}
05-树7 堆中的路径
最新推荐文章于 2024-09-14 18:46:05 发布