POJ 2299 Ultra-QuickSort(树状数组+离散化)
来源:互联网 发布:淘宝改价新规则 编辑:程序博客网 时间:2024/05/04 04:31
题意:给你一个n个整数组成的序列,每次只能交换相邻的两个元素,问你最少要进行多少次交换才能使得整个整数序列上升有序。
思路:首先要知道怎么求逆序数,从左往右看每个数字,该元素左边值比他大的元素个数就是这个元素的逆序数。所有逆序相加就是整个序列的逆序.统计元素左边比它大的元素个数,是不是和UVA1428很像了,只不过之前求小的,现在求比它大的那么就是sum(n)-sum(a[i])就是了。题目还有个问题就是数据范围很大,达到了几十亿,可是元素个数却只有50万个,显然我们没有办法开几十亿的数组,所以可以将这50万个元素离散化一下,因为这里只考虑元素的相对大小不考虑别的。
#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <string>#include <set>#include <ctime>#include <cmath>#include <cctype>using namespace std;#define maxn 500000+10#define maxnn 100000+10#define LL long longint cas=1,T;LL a[maxn];LL b[maxn];int c[maxn];int maxx,n;int lowbit(int i){return i&(-i);}int sum(int i){int ans = 0;while (i){ans +=c[i];i-=lowbit(i);}return ans;}void add(int i,int d){while (i<=n){c[i]+=d;i+=lowbit(i);}}int main(){//freopen("in","r",stdin);while (scanf("%d",&n)!=EOF && n){for (int i = 1;i<=n;i++){scanf("%d",&a[i]);b[i] = a[i];}sort(a+1,a+1+n); for (int i = 1;i<=n;i++){b[i] = upper_bound(a+1,a+n+1,b[i])-a-1;}/*for (int i = 1;i<=n;i++)printf("%d ",b[i]);*/memset(c,0,sizeof(c));LL ans = 0;for (int i = 1;i<=n;i++){add(b[i],1);ans+=sum(n)-sum(b[i]);}printf("%lld\n",ans);}//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);return 0;}
0 0
- POJ 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(树状数组+离散化)
- Ultra-QuickSort - POJ 2299 树状数组+离散化
- 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 Ultra-2299 QuickSort 【离散化+树状数组】
- 文章标题
- DC4C代码阅读(1)——介绍
- 面向对象——抽象基类
- HDU 1072 Nightmare(BFS)
- Cocos2d-x shader学习3: sprite描边(Outline)
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
- 一个IT文艺青年的生活态度:努力成为这样的人
- 安装mysql5.7.11zip方法总结
- 四、再谈PyTypeObject http://blog.csdn.net/debugm/article/details/8243496
- GCD和NSOperation的区别
- 2015年android出现的新技术
- html学习要点总结
- centos tigervnc
- groovy快速入门