这个为什么跑不对啊?大佬求解答。。
查看原帖
这个为什么跑不对啊?大佬求解答。。
1340302
jijianxiangsu楼主2024/5/25 19:51

这个为什么跑不对啊?大佬求解答。。

#include <bits/stdc++.h>
using namespace std;

int a[300005],b[300005];

void c(int la,int ra,int ib){
    for(int i=la;i<=ra;i++,ib++){
        b[ib]=a[i];
    }
}

void ab(int m){
    for(int i=1;i<=m;i++){
        a[i]=b[i];
    }
}

int main(){
	 //6 5 7 8 4 3 1 2
	int t;
	cin>>t;

	while(t--){
        int m;
        cin>>m;
        for(int i=1;i<=m;i++){
            cin>>a[i];
        }

        int add=2;//遍历每个分支
        while(add<=m){
            for(int i=1;i<=m;i+=add){
                if(a[i]<=a[i+add/2]){
                    c(i,i+add-1,i);
                }
                else{
                    //i,mid  mid+1,right
                    int mid=i+add/2-1;
                    int right=i+add-1;
                    c(i,mid,right);
                    c(mid+1,right,i);
                }
                for(int i=1;i<=m;i++)cout<<b[i];

                cout<<"\n";
            }
            //for(int i=1;i<=m;i++)cout<<b[i];

            ab(m);

            cout<<"\n";

            add*=2;
        }


	}
}

一个样例的输出
6 5 7 8 4 3 1 2
56000000
56780000
56783400
56783412

56783412
56781213

12131215
2024/5/25 19:51
加载中...