zoukankan      html  css  js  c++  java
  • hdu 1394 Minimum Inversion Number(线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 

    线段树求逆序数,先求出初始数组的逆序数(n logn),然后o(1)推出其他逆序数。因为输入为0--n-1,所以建树从0开始。

    code:

    #include <cstdlib>
    #include <cctype>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <iostream>
    #include <sstream>
    #include <set>
    #include <queue>
    #include <stack>
    #include <fstream>
    #include <iomanip>
    #include <bitset>
    #include <list>
    #include <ctime>
    using namespace std ;

    #define SET(arr, what)  memset(arr, what, sizeof(arr))
    #define FF(i, a)        for(i=0; i<a; i++)
    #define SD(a)           scanf("%d", &a)
    #define SSD(a, b)       scanf("%d%d", &a, &b)
    #define SF(a)           scanf("%lf", &a)
    #define SS(a)           scanf("%s", a)
    #define SLD(a)          scanf("%lld", &a)
    #define PF(a)           printf("%d\n", a)
    #define PPF(a, b)       printf("%d %d\n", a, b)
    #define SZ(arr)         (int)a.size()
    #define SWAP(a,b)       a=a xor b;b= a xor b;a=a xor b;
    #define read            freopen("in.txt", "r", stdin)
    #define write            freopen("out.txt", "w", stdout)
    #define MAX             1<<30
    #define ESP             1e-5
    #define lson            l, m, rt<<1|1
    #define rson            m+1, r, (rt<<1)+2
    template<class T> inline T sqr(T a){return a*a;}
    template<class T> inline void AMin(T &a,T b){if(a==-1||a>b)a=b;}
    template<class T> inline void AMax(T &a,T b){if(a<b)a=b;}
    template<class T> inline T Min(T a,T b){return a>b?b:a;}
    template<class T> inline T Max(T a,T b){return a>b?a:b;}
    const int maxn = 5010 ;
    int sum[maxn<<2] ;
    int data[maxn] ;
    void build(int l, int r, int rt){
        sum[rt] = 0 ;
        if(l==r)    return ;
        int m = (l + r) >> 1 ;
        build(lson) ;
        build(rson) ;
    }
    void update(int x, int l, int r, int rt){
        sum[rt] ++ ;
        if(l==r)    return ;
        int m = (l + r) >> 1 ;
        if(x<=m) update(x, lson) ;
        else  update(x, rson) ;
    }
    int query(int L, int R, int l, int r, int rt){
        if(L<=l&&r<=R)  return sum[rt] ;
        int m = (l + r) >> 1 ;
        int ret = 0 ;
        if(L<=m) ret += query(L, R, lson) ;
        if(R>m)  ret += query(L, R, rson) ;
        return ret ;
    }
    int main(){
        int n, i, j, ini, ans ;
        while(~SD(n)){
            build(0, n-10) ;
            ini = 0 ;
            FF(i, n){
                SD(data[i]) ;
                ini += query(data[i], n, 0, n-10) ;
                update(data[i], 0, n-10) ;
            }
            ans = ini ;
            FF(i, n){
                ini += n - data[i] - data[i] - 1 ;
                ans = Min(ini, ans) ;
            }
            PF(ans) ;
        }
        return 0 ;
    }

  • 相关阅读:
    SQLi-Labs
    ASP.NET 简介
    CSS
    Apache 基本配置
    【Windows 基础】 01
    sqli1-4
    SQL注入介绍(本文更新中)
    【DC-1】靶机实战
    常见端口的漏洞总结
    element ui table动态控制某列展示与否,并且该列使用了fixed,导致列表错位问题
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2647069.html
Copyright © 2011-2022 走看看