记录编号 416862 评测结果 AAAAAAAAAAA
题目名称 637.排序测试 最终得分 100
用户昵称 HeHe 是否通过 通过
代码语言 C++ 运行时间 1.819 s
提交时间 2017-06-22 21:17:58 内存使用 31.82 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 2e6 + 10;

namespace IO{
    inline char getc(void){
        static char buf[1 << 18], *fs, *ft;
        return (fs == ft && (ft = (fs = buf) + fread(buf, 1, 1 << 18, stdin)), fs == ft) ? EOF : *fs++;
    }

    inline int in(void){
        register int res = 0;
        register char tmp = getc();
        while(!isdigit(tmp)) tmp = getc();
        while(isdigit(tmp))
            res = (res + (res << 2) << 1) + (tmp ^ 48),
            tmp = getc();
        return res;
    }

    char op[1 << 24], *ops = op;
    char tmp[14];

    inline void write(int x){
        if(!x){
            *ops = '0';
            *(ops + 1) = ' ';
            ops += 2;
            return ;
        }

        register char *p = tmp;
        while(x){
            *(++p) = (x % 10) | 0x30;
            x /= 10;
        }

        while(*p) *(ops++) = *(p--);
        *(ops++) = ' ';
        return ;
    }

    inline void write_all(void){
        fwrite(op, 1, ops - op, stdout);
        return ;
    }
}

using IO::in;
using IO::write;
using IO::write_all;

void gb(int *l, int *r);

int s[MAXN];
int N;

int main(){ 
#ifndef LOCAL
    freopen("sorttest.in", "r", stdin);
    freopen("sorttest.out", "w", stdout);
#endif
    N = in();

    for(int i = 1; i <= N; ++i) s[i] = in();
    gb(s + 1, s + N);

    for(int i = 1; i <= N; ++i) write(s[i]);
    write_all();
    return 0;
}

void gb(int *l, int *r){
    static int p[MAXN];
    if(l == r) return ;
    register int *mid = l + ((r - l) >> 1);
    gb(l, mid);
    gb(mid + 1, r);

    register int *k = p;
    register int *i = l, *j = mid + 1;

    while(i <= mid && j <= r){
        if(*i < *j) *(k++) = *(i++);
        else *(k++) = *(j++);
    }

    while(i <= mid) *(k++) = *(i++);
    while(j <= r) *(k++) = *(j++);

    k = p;
    for(; l <= r; ++l) *l = *(k++);

    return ;
}