zoukankan      html  css  js  c++  java
  • 1019 逆序数

    1019 逆序数

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     
    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
    如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。
    Input
    第1行:N,N为序列的长度(n <= 50000)
    第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)
    Output
    输出逆序数
    Input示例
    4
    2
    4
    3
    1
    Output示例
    4

    一个简单的求逆序数,树状数组最好不过。
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #define N 50005
     6 #define mem(a) memset(a,0,sizeof(a))
     7 using namespace std;
     8 
     9 struct Node{
    10     int a,b;
    11 }node[N];
    12 int tree[N];
    13 bool cmp(Node x,Node y){
    14     return x.a>y.a;
    15 }
    16 int lowbit(int x){ return x&(-x);}
    17 
    18 int update(int x){
    19     while(x<N){
    20         tree[x]++;
    21         x+=lowbit(x);
    22     }
    23 }
    24 int sum(int x){
    25     int sum=0;
    26     while(x){
    27         sum+=tree[x];
    28         x-=lowbit(x);
    29     }
    30     return sum;
    31 }
    32 int main() {
    33     int n;
    34     cin>>n;
    35     mem(tree);
    36     mem(node);
    37     for(int i=1;i<=n;i++){
    38         cin>>node[i].a;
    39         node[i].b=i;
    40     }
    41     sort(node+1,node+1+n,cmp);
    42     int cnt=0;
    43     for(int i=1;i<=n;i++){
    44         cnt+=sum(node[i].b);
    45         update(node[i].b);
    46     }
    47     cout<<cnt<<endl;
    48     return 0;
    49 }
  • 相关阅读:
    Mac 虚拟环境搭建使用
    Django-rest-framework --- 分页,过滤,排序组件
    Celery 分布式任务队列 -- 基础入门
    Redis
    列表
    Git
    django 框架模型之models常用的Field,及常见错误原因及处理方案。
    Django-rest-framework --- 总结
    Django-rest-framework --- drf视图的详解
    Django之POST GET与前后端交互
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/7341871.html
Copyright © 2011-2022 走看看