image.png

    1. #include <iostream>
    2. #include <algorithm>
    3. using namespace std;
    4. const int N = 100010;
    5. int q[N],num;
    6. void down(int u){
    7. int t = u;
    8. if(u * 2 <= num && q[u * 2] < q[t]) t = u * 2;
    9. if(u * 2 + 1 <= num && q[u * 2 + 1] < q[t]) t = u * 2 + 1;
    10. if(u != t){
    11. swap(q[u],q[t]);
    12. down(t);
    13. }
    14. }
    15. /*
    16. down()
    17. */
    18. int main(){
    19. int n,m;
    20. cin >> n >> m;
    21. for(int i = 1; i <= n; i ++) cin >> q[i];
    22. num = n;
    23. for(int i = n / 2; i; i--) down(i);
    24. while(m--){
    25. cout << q[1] << ' ';
    26. q[1] = q[num];
    27. num --;
    28. down(1);
    29. }
    30. return 0;
    31. }