记录编号 398360 评测结果 AAAAAAAAAAE
题目名称 排序测试 最终得分 90
用户昵称 Gravatarsxysxy 是否通过 未通过
代码语言 C++ 运行时间 1.073 s
提交时间 2017-04-22 08:15:18 内存使用 47.81 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <cstdarg>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <queue>
#include <vector>
#include <cctype>
using namespace std;
const int MAXN = 2000100;
namespace IO{
  char buf[1<<20], *fs, *ft;
  inline char readc(){
    return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<20,stdin)),fs==ft)?0:*fs++;
  }
  template<typename T>
  inline void splay(T &r){
    char c; 
    while((c = readc())){
      if(c >= '0' && c <= '9'){
        r = c^0x30; break;
      }
    }while(isdigit(c = readc()))r = r*10+(c^0x30);
  }
  char opt[1<<24], *op = opt;
  char tmp[14];
  inline void access(unsigned x){
    if(!x){
      *op = '0';
      *(op+1) = ' ';
      op += 2;
      return;
    }
    char *p = tmp;
    while(x){
      int k = x%10;
      x /= 10;
      *(++p) = k|0x30; 
    }
    while(*p)*op++ = *p--;
    *op++ = ' ';
  }
  inline void makeroot(){
    fwrite(opt, op-opt-1, 1, stdout);
  }
}using IO::splay; using IO::access; using IO::makeroot;
unsigned a[MAXN], c[MAXN*3];
unsigned minm[2] = {0, MAXN*3}, maxm[2] = {0, 0};
int main(){
  freopen("sorttest.in", "r", stdin);
  freopen("sorttest.out", "w", stdout);
  unsigned n; splay(n);
  unsigned rem = n%4;
  unsigned lim = n-rem;
  for(register unsigned *pa = a; pa < a+lim; pa += 4){
    splay(*(pa)); splay(*(pa+1)); splay(*(pa+2)); splay(*(pa+3));
    maxm[*pa > *(maxm+1)] = *pa; minm[*pa < *(minm+1)] = *pa;
    maxm[*(pa+1) > *(maxm+1)] = *(pa+1); minm[*(pa+1) < *(minm+1)] = *(pa+1);
    maxm[*(pa+2) > *(maxm+1)] = *(pa+2); minm[*(pa+2) < *(minm+1)] = *(pa+2);
    maxm[*(pa+3) > *(maxm+1)] = *(pa+3); minm[*(pa+3) < *(minm+1)] = *(pa+3);
    c[*pa]++, c[*(pa+1)]++, c[*(pa+2)]++, c[*(pa+3)]++;
  }
  for(register unsigned *pa = a+lim; pa < a+n; pa++){
    splay(*(pa));
    maxm[*pa > *(maxm+1)] = *pa; minm[*pa < *(minm+1)] = *pa;
    c[*pa]++;
  }
  maxm[0] = maxm[1];
  for(register unsigned f = minm[1]; f <= *maxm; f++)
    while(c[f]--)access(f);
  makeroot();
  return 0;
}