zoukankan      html  css  js  c++  java
  • POJ2299 UltraQuickSort(逆序对个数)

    Ultra-QuickSort
    Time Limit: 7000MS   Memory Limit: 65536K
    Total Submissions: 57461   Accepted: 21231

    Description

    In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence 
    9 1 0 5 4 ,

    Ultra-QuickSort produces the output 
    0 1 4 5 9 .

    Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.

    Input

    The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.

    Output

    For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.

    Sample Input

    5
    9
    1
    0
    5
    4
    3
    1
    2
    3
    0
    

    Sample Output

    6
    0
    

    Source

     
    哼你以为你让我WA我就不发日志了吗QAQ
     
    经过快一年的努力终于改对了!!哈哈哈哈哈
     
    问题出在离散化,相等的数我把弄了不同的位置所以错了

     1 #include "bits/stdc++.h"
     2 #define mem(a,b) memset(a,b,sizeof(a))
     3 using namespace std;
     4 typedef long long LL;
     5 const int MAX=500005;
     6 int n;
     7 struct Poi{
     8     int w,p,z;
     9 }cc[MAX];
    10 int c[MAX];
    11 void add(int x,int y){for (;x<=n;x+=(x&-x)) c[x]+=y;}
    12 int search(int x){int an(0);for (;x>0;x-=(x&-x)) an+=c[x];return an;}
    13 bool cmp1(Poi x,Poi y){return x.w>y.w;}
    14 bool cmp2(Poi x,Poi y){return x.p<y.p;}
    15 void init(){
    16     int i,j;
    17     for (i=1;i<=n;i++){
    18         scanf("%d",&cc[i].w);
    19         cc[i].p=i;
    20     }
    21     sort(cc+1,cc+n+1,cmp1);
    22     for (i=1;i<=n;i++){

      if (vv[i].w!=vv[i-1].w)

        vv[i].z=++tt;

       else

       vv[i].z=tt;
    24 } 25 sort(cc+1,cc+n+1,cmp2); 26 mem(c,0); 27 } 28 int main(){ 29 freopen ("ultra.in","r",stdin); 30 freopen ("ultra.out","w",stdout); 31 int i,j; 32 int ans; 33 while (scanf("%d",&n),n){ 34 init();ans=0; 35 for (i=1;i<=n;i++){ 36 ans+=search(cc[i].z-1); 37 add(cc[i].z,1); 38 } 39 printf("%d\n",ans); 40 } 41 return 0; 42 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    webpack安装、环境搭建和基本配置
    webpack知识点总结
    Vue之Vuex的使用
    vue之获取滚动条位置
    MongoDB ORM mongoose 配置和使用
    sequelize之通过options生成sql语句
    七牛上传之PutExtra的使用
    使用ssl-validator识别证书信息
    深入理解计算机系统(第三版)第八章重要内容摘要
    深入理解计算机系统(第三版)第七章重要内容摘要
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/6028488.html
Copyright © 2011-2022 走看看