zoukankan      html  css  js  c++  java
  • poj 2299

    Ultra-QuickSort
    Time Limit: 7000MS   Memory Limit: 65536K
    Total Submissions: 66949   Accepted: 25081

    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

    因为数组里元素比较大,所以需要离散化处理

     

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <string>
     5 #include <string.h>
     6 #include <cstring>
     7 #include <stdio.h>
     8 #define lowbit(x) x&(-x)
     9 
    10 using namespace std;
    11 const int maxn=5e5+10;
    12 typedef long long ll;
    13 
    14 int n;
    15 int a[maxn];
    16 ll c[maxn];
    17 
    18 struct Node{
    19     int v;
    20     int order;
    21 }b[maxn];
    22 
    23 void add(int x){
    24     for(int i=x;i<=n;i+=lowbit(i))
    25         c[i]+=1;
    26 }
    27 
    28 int getsum(int x){
    29     ll as=0;
    30     for(int i=x;i>0;i-=lowbit(i)){
    31 
    32         as+=c[i];
    33     }
    34     return as;
    35 }
    36 bool cmp(const Node&a,const Node&b){
    37     return a.v<b.v;
    38 }
    39 
    40 int main(){
    41     ios::sync_with_stdio(0);
    42     int i,j;
    43     while(~scanf("%d",&n)&&n){
    44         for(i=1;i<=n;i++){
    45             scanf("%d",&b[i].v);
    46             b[i].order=i;
    47         }
    48         sort(b+1,b+n+1,cmp);
    49         for(i=1;i<=n;i++){
    50             a[b[i].order]=i;
    51         }
    52         ll  ans=0;
    53         memset(c,0,sizeof(c));
    54         for(i=1;i<=n;i++){
    55             add(a[i]);
    56             ans+=(i-getsum(a[i]));
    57         }
    58         cout<<ans<<endl;
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    Review Python装饰器
    Python自动化开发三元运算 列表解析 生成器表达式
    Python自动化开发函数02
    Python自动化开发函数03
    Python自动化开发文件
    ELK02ELK收集Linux系统平台应用系统日志
    ELK01Elasticsearch
    html5调用摄像头并拍照
    Docker 安装 PostgreSQL
    《TensorFlow+Keras自然语言处理实战》图书介绍
  • 原文地址:https://www.cnblogs.com/z-712/p/8644354.html
Copyright © 2011-2022 走看看