POJ 2299 Ultra-QuickSort
来源:互联网 发布:杭州汉聚网络怎么样 编辑:程序博客网 时间:2024/04/28 02:44
题目大意就是要求数组中逆序数的对数,和51nod1019一样,可以用树状数组。
先对所有数进行排序,还要记录每个数原来在数组中的下标,在排好序的数组中,从小到大依次访问,假设访问到第i个数,用树状数组查询1~i-1的数中原始下标小于等于k的个数(k是第i个数的原始下标)。
同时动态更新树状数组。
#include<iostream>#include<algorithm>#include<cstring>using namespace std;int C[500005],n;int lowbit(int x){ return x&-x;}int sum(int x) //求前缀和,x向左上爬{ int ret=0; while(x>0) { ret+=C[x]; x-=lowbit(x); } return ret;}void add(int x,int d) //A[x]加上d,x向右上爬{ while(x<=n) { C[x]+=d; x+=lowbit(x); }}struct D{ int id; long long val;};bool operator < (D a,D b){ return a.val<b.val;}D data[500005];int main(){ while(cin>>n&&n) { long long ans=0; for(int i=1; i<=n; i++) { cin>>data[i].val; data[i].id=i; } sort(data+1,data+n+1); data[0].val=-111; memset(C,0,sizeof(C)); int pre; for(int i=1; i<=n; i++) { if(data[i].val!=data[i-1].val) { pre=sum(n)-sum(data[i].id); ans+=pre; } else ans+=pre; add(data[i].id,1); } cout<<ans<<endl; }}
0 0
- POJ 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- poj 2299Ultra-quicksort
- POJ-2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 - Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort
- 动态规划-美团笔试-字符串计数-恶心的dp
- [数据结构-树状数组小结]
- [数据结构-查询区间最小值小结(RMQ问题(Range Minimum Query))]
- hdu 4568 旅行商问题dp
- Linux命令——find
- POJ 2299 Ultra-QuickSort
- windows本地评测批处理脚本
- Linux下软链接与硬链接
- hdu4758 hdu2825 hdu4057 AC自动机与状态压缩dp的结合
- poj 2155 二维线段树
- CRC
- poj 2528 数的离散化+线段树
- poj 2352 树状数组
- poj 2823 线段树