zoukankan      html  css  js  c++  java
  • poj2299 ( bit )

    树状数组求逆序数,先排个序,从大到小往插,计算在他的前面有几个比他大,就是他的逆序数。

    (PS:最近对数量越来越不敏感了,老在这上面错。多做题,不能断啊)

     1 #include <cstdio>
     2 #include<algorithm>
     3 #include <vector>
     4 using namespace std;
     5 typedef long long i64;
     6 struct po
     7 {
     8    int num,ord;
     9 } p[500050];
    10 int a[500050];
    11 template<typename T = int>
    12 struct BIT {
    13     vector<T> a;
    14     void init(int n) {
    15         vector<T>(n+1).swap(a);
    16     }
    17     void add(int i, T v) {
    18         for(int j = i + 1; j < (int)a.size(); j = (j|(j-1)) + 1) {
    19             a[j] += v;
    20         }
    21     }
    22     T sum(int i) const {
    23         T ret = T();
    24         for(int j = i; j > 0; j = j & (j-1)) {
    25             ret += a[j];
    26         }
    27         return ret;
    28     }
    29     T get(int i) const {
    30         return sum(i+1) - sum(i);
    31     }
    32     void set(int i, T v) {
    33         add(i, v - get(i));
    34     }
    35 };
    36 int cmp(po a,po b)
    37 {
    38     if(a.num>=b.num) return 1;
    39     else return 0;
    40 }
    41 int main( ) {
    42     int n;
    43     while( scanf("%d", &n) != EOF&&n )
    44     {
    45         BIT<int> bit;
    46         bit.init(n);
    47         for(int i=0;i<n;i++)
    48         {
    49             scanf("%d",&p[i].num);
    50             p[i].ord=i;
    51         }
    52         sort(p,p+n,cmp);
    53         i64 summ=0;
    54         for(int i=0;i<n;i++)
    55         {
    56             bit.set(p[i].ord,1);
    57             summ+=bit.sum(p[i].ord);
    58         }
    59         printf("%lld
    ",summ);
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    display:flex 布局之 骰子
    vue 生命周期
    vue webpack 懒加载
    后台管理页面基本布局
    模拟ie9的placeholder
    常用的功能封装 pool.js
    六位数字字母验证码
    CommonJs AMD CMD
    项目封版后的总结
    jq 回到顶部
  • 原文地址:https://www.cnblogs.com/Acgsws/p/3221893.html
Copyright © 2011-2022 走看看