社区讨论

这个可以用堆排做吗?为什么中间三个点RE?求大神解答

P1177【模板】排序参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6h8shc
此快照首次捕获于
2025/11/20 04:50
4 个月前
此快照最后确认于
2025/11/20 04:50
4 个月前
查看原帖
#代码如下:
CPP
using namespace std;
int main(){
    int n,a[100000+10],k,m,j;
    cin>>n;
    cin>>a[1];
    for(int i=2;i<=n;i++){
        cin>>a[i];
        j=i;
        while(a[j]<a[j/2]&&j>1){
            int tmp=a[j];
            a[j]=a[j/2];
            a[j/2]=tmp;
            j/=2;
        }
    }
    int v=n;
    for(int q=1;q<=n;q++){
        cout<<a[1]<<" ";
        k=1;
        a[1]=a[v--];
        while((a[k]>a[2*k]&&k*2<=v)||(a[k]>a[k*2+1]&&k*2+1<=v)){
         m=k*2;
        if(a[m]>a[m+1]&&m+1<=v)m++;
        int temp=a[k];
            a[k]=a[m];
            a[m]=temp;
            k=m;
        }
    }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...