• poj2299


    树状数组简单题(第一道树状数组哈)

    唯一有点意思的是这道题目需要离散化。详见代码

    题意: 求一组数的逆序数

     1 //离散化+树状数组
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdio>
     5 using namespace std;
     6 const int MAX=500000+10;
     7 struct node
     8 {
     9     int val,pos;
    10 }v[MAX];
    11 int num[MAX],n,c[MAX];
    12 int cmp(node a,node b)
    13 {
    14     return a.val<b.val;
    15 }
    16 int lowbit(int x)
    17 {
    18     return x&(-x);
    19 }
    20 void add(int x)
    21 {
    22     while(x<=n)
    23     {
    24         c[x]++;
    25         x+=lowbit(x);
    26     }
    27 }
    28 int sum(int x)
    29 {
    30     int ans=0;
    31     while(x>0)
    32     {
    33         ans+=c[x];
    34         x-=lowbit(x);
    35     }
    36     return ans;
    37 }
    38 int main()
    39 {
    40     long long summ;
    41     while(scanf("%d",&n)&&n)
    42     {
    43         memset(c,0,sizeof(c));
    44         for(int i=1;i<=n;i++)
    45         {
    46             scanf("%d",&v[i].val);
    47             v[i].pos=i;
    48         }
    49         sort(v+1,v+n+1,cmp);
    50         for(int i=1;i<=n;i++)
    51         {
    52             num[v[i].pos]=i; //离散化部分
    53         }
    54         int ans=0;
    55         summ=0;
    56         for(int i=1;i<=n;i++)
    57         {
    58             add(num[i]);
    59             ans=sum(num[i]-1);
    60             summ+=(i-1-ans);
    61         }
    62         printf("%lld ",summ);
    63     }
    64     return 0;

    65 } 

  • 相关阅读:
    堆和栈的区别详解
    数组和指针背后——内存角度
    程序的运行时 数据结构
    连接MySQL数据库 ODBC DSN的配置
    SQL应该避免查询方式
    罗斯文(NORTHWIND )示例数据库和AdventureWorks示例数据库的安装
    敏捷个人:从中学到了什么?
    开发通用类 字符串加密、解密篇
    关于Session的灵活运用
    解决Ext.Combobox this.getRawValue() is undefined的错误
  • 原文地址:https://www.cnblogs.com/acvc/p/3534468.html
Copyright © 2020-2023  润新知