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

求a1 a2 a3 ...an此序列的逆序数

怎么离散化?

首先将序列由小到大排序,

用排序后该数的位置代表这个数,如果a数组中有相等的数它的位置就是前一个的位置,

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1000010;
int n,c[maxn];
int lowbit(int x)
{return x&(-x);
}
ll query(int x)
{ll res=0;while(x){res+=c[x];x-=lowbit(x);}return res;
}
void add(int x,int val)
{while(x<=n){c[x]+=val;x+=lowbit(x);}
}
struct node
{int val,id;
};
bool cmp(node a,node b)
{return a.val<b.val;
}
node a[maxn];
int b[maxn];
int main()
{while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a[i].val);a[i].id=i;}sort(a+1,a+1+n,cmp);int f=1;b[a[1].id]=1;for(int i=2;i<=n;i++){if(a[i].val==a[i-1].val){b[a[i].id]=b[a[i-1].id];}else{b[a[i].id]=++f;}}ll ans=0;memset(c,0,sizeof(c));for(int i=n;i>=1;i--){add(b[i],1);ans+=query(b[i]-1);//cout<<b[i].val<<" "<<ans<<endl;}printf("%lld\n",ans);}
}

树桩数组求逆序数+离散化(数太大)相关推荐

  1. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  2. Swaps and Inversions hdu多校训练第二场 树状数组求逆序数+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=6318 交换相邻的元素,有几个逆序对,就交换几次使其变成顺序对 #include<bits/stdc++.h ...

  3. 离散化+树状数组求逆序数

    题目:http://poj.org/problem?id=2299 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0--- 999999999:显然 ...

  4. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

  5. HDU 4911 Inversion 树状数组求逆序数对

    显然每次交换都能降低1 所以求出逆序数对数,然后-=k就好了.. . _(:зゝ∠)_ #include<stdio.h> #include<string.h> #includ ...

  6. HDU 2838 Cow Sorting(双树状数组+求逆序数)

    Problem Description Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Ea ...

  7. Japan树状数组求逆序数

    http://poj.org/problem?id=3067 给出一个序列 a1 a2 a3 ···an 问此序列中逆序对的个数? 逆序对:i<j,ai>aj 方法:就是用树状数组搞,从后 ...

  8. 归并排序树状数组求逆序数

    归并排序: #include <iostream> #include <vector> using namespace std; vector<int>input, ...

  9. NYOJ 117 求逆序数

    求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序 ...

最新文章

  1. VMware下redhat9.0的上网设置
  2. 生成各种统计图的C#方法
  3. 1.2.3 OSI参考模型(2)
  4. SAP的这三款CRM解决方案,您能区分清楚么
  5. opengl如何画出一个球_OpenGL-Controlling and Monitoring the Pipeline
  6. python-main
  7. 二阶龙格库塔公式推导_带你走进最美数学公式
  8. Python format 函数- Python零基础入门教程
  9. mysql双主多从高可用配置_双主MySQL+keepalived高可用配置
  10. 安装McAfee 8.7i 提示错误1920怎么办?
  11. 蓝桥杯2021年第十二届C++省赛第三题-直线
  12. Redis百亿级Key你用过吗?
  13. php 关于token、签名、加密的一点理解
  14. 杭电多校第三次 Problem A. Ascending Rating(单调队列)
  15. python函数手册 chm_python中文手册chm
  16. 使用字典暴力破解练习
  17. 破解 找回 lockdir 加密的文件
  18. 无法打开键,请验证您对该键拥有足够的访问权限
  19. 微信自动回复的智能聊天机器人怎么做?
  20. 利用TODA进行ORACLE数据快捷导入导出

热门文章

  1. mysql读写分离java配置方法_springboot配置数据库读写分离
  2. mysql in过大_项目中常用的 19 条 MySQL 优化
  3. php生成随机汉字,PHP随机生成中文段落示例【测试网站内容时使用】
  4. Java知识点汇总以及常见面试题
  5. python工资一般多少西安-Python让我在西安成为高薪quot;贵族”
  6. python画条形图-用Matplotlib如何绘制条形图、直方图和散点图
  7. python使用-Python 应该怎么去练习和使用?
  8. python的优点有哪些-python语言有什么优势
  9. 快准狠才叫爽!六款智能电视语音识别大比拼
  10. 百度免费开放长语音识别功能