zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 30 D

    Merge Sort

    题意:给出归并排序的规则,构造一个长度为n的序列,使得序列按归并排序递归k次变为有序

    思路:先构造一个有序序列,然后倒着模拟归并排序的递归过程,每次递归将有序变为无序

    AC代码:

    #include "iostream"
    #include "iomanip"
    #include "string.h"
    #include "stack"
    #include "queue"
    #include "string"
    #include "vector"
    #include "set"
    #include "map"
    #include "algorithm"
    #include "stdio.h"
    #include "math.h"
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
    #define mem(a,x) memset(a,x,sizeof(a))
    #define step(x) fixed<< setprecision(x)<<
    #define mp(x,y) make_pair(x,y)
    #define pb(x) push_back(x)
    #define ll long long
    #define endl ("
    ")
    #define ft first
    #define sd second
    #define lrt (rt<<1)
    #define rrt (rt<<1|1)
    using namespace std;
    const ll mod=1e9+7;
    const ll INF = 1e18+1LL;
    const int inf = 1e9+1e8;
    const double PI=acos(-1.0);
    const int N=1e5+100;
    
    int n,k,a[N],f[N];
    
    void dfs(int l, int r){
        if(k<=1 || r<=l+1) return;
        k-=2;
        int mid=l+r>>1;
        swap(a[mid-1],a[mid]);
        dfs(l, mid);
        dfs(mid, r);
    }
    
    int main(){
        ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
        cin>>n>>k;
        if((k&1)==0 || k>=2*n){
            cout<<-1;
            return 0;
        }
        int d=log2(n)+1;
        for(int i=1; i<=n; ++i) a[i]=i;
        dfs(1, n+1);
        for(int i=1; i<=n; ++i) cout<<a[i]<<" ";
        return 0;
    }
  • 相关阅读:
    时间复杂度的分析
    插入排序
    maven中jar、war、pom的区别
    Maven属性(properties)标签的使用
    超级POM
    maven 常用命令
    Maven Pom文件标签详解
    maven 查找依赖的办法
    maven snapshot和release版本的区别
    maven pom文件标签含义
  • 原文地址:https://www.cnblogs.com/max88888888/p/7666371.html
Copyright © 2011-2022 走看看