zoukankan      html  css  js  c++  java
  • SGU 180 Inversions【树状数组】

    题意:求逆序数

    和POJ那题求逆序数的一样,不过这题离散化之后,要去一下重,然后要开到long long

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int INF = (1<<30)-1;
    15 const int mod=1000000007;
    16 const int maxn=80005;
    17 
    18 int a[maxn];
    19 int c[maxn];//树状数组
    20 
    21 struct node{
    22     int x;
    23     int id;
    24 } p[maxn];
    25 
    26 int cmp(node n1,node n2){
    27     return n1.x < n2.x;
    28 }
    29 
    30 int lowbit(int x){ return x &(-x);}
    31 
    32 __int64 sum(int x){
    33     __int64 ret=0;
    34     while(x > 0){
    35         ret+=c[x];x-=lowbit(x);
    36     }
    37     return ret;
    38 }
    39 
    40 void add(int x,int d){
    41     while(x < maxn){
    42         c[x]+=d;x+=lowbit(x);
    43     }
    44 }
    45 
    46 int main(){
    47     int n;
    48     scanf("%d",&n);
    49     for(int i=1;i<=n;i++) scanf("%d",&p[i].x),p[i].id=i;
    50     sort(p+1,p+n+1,cmp);
    51     
    52     for(int i=1,j=0;i<=n;i++){
    53         if(i==1 || p[i].x != p[i-1].x) j++;
    54         a[p[i].id] = j;
    55     }
    56     
    57     memset(c,0,sizeof(c));
    58     __int64 ans=0;
    59     for(int i=1;i <=n;i++ ) {
    60         add(a[i],1);
    61         ans += i - sum(a[i]); 
    62     }
    63     printf("%I64d
    ",ans);
    64     return 0;
    65 } 
    View Code
  • 相关阅读:
    Directx
    apr库开发
    linux 上編譯apache
    数字信号处理---FFT
    C# Parallel用法
    C#线程同步--线程通信
    C#线程同步--限量使用
    C#线程安全类型
    C# Task用法
    C# ThreadPool类(线程池)
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4594661.html
Copyright © 2011-2022 走看看