POJ2299 Ultra-QuickSort(树状数组)
来源:互联网 发布:尤克里里调音器软件 编辑:程序博客网 时间:2024/06/05 19:42
题目链接
题目大意:给出一个序列,只能交换相邻的两个数字,是的交换完成时变成一个升序序列,求最小的交换次数。
求逆序数,给出的数据过大,要离散化
代码如下:
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int N=500005;int tree[N];struct node{ int val; int id;}in[N];bool cmp(node a,node b){ return a.val<b.val;}int lowbit(int i){ return i&(-i);}void add(int i,int x){ while(i<=N) { tree[i]+=x; i+=lowbit(i); }}int query(int i){ int cnt=0; while(i>0) { cnt+=tree[i]; i-=lowbit(i); } return cnt;}int main(){ int n; int data[N]; while(scanf("%d",&n)!=EOF&&n) { for(int i=1;i<=n;i++)//离散化 { scanf("%d",&in[i].val); in[i].id=i; } sort(in+1,in+n+1,cmp); for(int i=1;i<=n;i++) data[in[i].id]=i; memset(tree,0,sizeof(tree)); long long int ans=0; for(int i=1;i<=n;i++) { ans+=i-query(data[i])-1; add(data[i],1); } printf("%lld\n",ans); } return 0;}
还有一种离散化的方式能去使相同的元素离散化后的值是一样的
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int N=500005;int tree[N];struct node{ int val; int id;}in[N];bool cmp(node a,node b){ return a.val<b.val;}int lowbit(int i){ return i&(-i);}void add(int i,int x){ while(i<=N) { tree[i]+=x; i+=lowbit(i); }}int query(int i){ int cnt=0; while(i>0) { cnt+=tree[i]; i-=lowbit(i); } return cnt;}int main(){ int n; int data[N]; while(scanf("%d",&n)!=EOF&&n) { for(int i=1;i<=n;i++)//离散化 { scanf("%d",&in[i].val); in[i].id=i; } sort(in+1,in+n+1,cmp); int p=1; data[in[1].id]=p; for(int i=2;i<=n;i++) { if(in[i].val!=in[i-1].val) p++; data[in[i].id]=p; } for(int i=1;i<=n;i++) printf("%d ",data[i]); printf("\n"); memset(tree,0,sizeof(tree)); long long int ans=0; for(int i=1;i<=n;i++) { ans+=i-query(data[i])-1; add(data[i],1); } printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- 【树状数组】 poj2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort(树状数组)
- poj2299 Ultra-QuickSort 树状数组
- POJ2299 Ultra-QuickSort 树状数组
- poj2299 Ultra-QuickSort 树状数组
- POJ2299 Ultra-QuickSort(树状数组)
- POJ2299 Ultra-QuickSort 【树状数组】
- POJ2299 Ultra-QuickSort 【树状数组】+【hash】
- POJ2299 Ultra-QuickSort【树状数组】【逆序数】
- poj2299 Ultra-QuickSort (树状数组+离散化)
- POJ2299 Ultra-QuickSort 树状数组+离散化
- poj2299 Ultra-QuickSort 二叉排序树或树状数组
- poj2299 Ultra-QuickSort 树状数组 + 离散化
- POJ2299 [Ultra-QuickSort] 值域树状数组
- POJ2299-Ultra-QuickSort(树状数组+离散化)
- POJ2299 Ultra-QuickSort(树状数组求逆序数)
- POJ2299:Ultra-QuickSort(树状数组求逆序数)
- POJ2299 Ultra-QuickSort(逆序数问题,树状数组求解)
- PAT A1069
- 几种方法来实现scp拷贝时无需输入密码
- selenium python 编码格式 页面元素显式、隐式等待 鼠标悬浮
- 第一章
- R + python︱数据规范化、归一化、Z-Score
- POJ2299 Ultra-QuickSort(树状数组)
- 设计模式-单例模式
- f_sync解决fatfs文件掉电数据丢失问题
- popwindow
- CSS全屏布局的6种方式
- 使用node的express框架进行基于cors的get和post跨域
- ESP8266固件升级
- 组合数计算(Lucas 逆元 中国剩余定理)
- TensorFlow