HDU 1394 Minimum Inversion Number(逆序数)
2014-05-07 22:50
218 查看
题目链接:HDU 1394 Minimum Inversion Number
【题意】给你一个1~N的数字组成的初始序列,然后每一次都将第一个数字移到最后,形成新的序列,然后求出这些序列的逆序数中的最小值。
【思路】开始可以用任意一种方法(线段树 or 暴力 or 树状数组)计算出初始数列的逆序数sum,这里我比较懒,就直接用的暴力找的sum,对于a[i](0~~n-1),每挪一个,用sum减去挪之前它右边比它小的数的个数(也就是a[i]个),再用sum加上挪之后左边比它大的数的个数(也就是n-a[i]-1个),就是挪了a[i]之后的逆序数了。的确是比较巧妙的数学原理啊!
下面是AC代码:
【题意】给你一个1~N的数字组成的初始序列,然后每一次都将第一个数字移到最后,形成新的序列,然后求出这些序列的逆序数中的最小值。
【思路】开始可以用任意一种方法(线段树 or 暴力 or 树状数组)计算出初始数列的逆序数sum,这里我比较懒,就直接用的暴力找的sum,对于a[i](0~~n-1),每挪一个,用sum减去挪之前它右边比它小的数的个数(也就是a[i]个),再用sum加上挪之后左边比它大的数的个数(也就是n-a[i]-1个),就是挪了a[i]之后的逆序数了。的确是比较巧妙的数学原理啊!
下面是AC代码:
/* ** HDU 1394 Minimum Inversion Number ** Created by Rayn @@ 2014/04/14 */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAX = 5010; int arr[MAX], ans; int main() { #ifdef _Rayn //freopen("in.txt", "r", stdin); #endif int N; while(scanf("%d", &N) != EOF && N) { for(int i=0; i<N; ++i) { scanf("%d", &arr[i]); } int sum = 0; for(int i=0; i<N; ++i) { for(int j=i+1; j<N; ++j) { if(arr[i] > arr[j]) sum++; } } ans = sum; for(int i=0; i<N-1; ++i) { sum = (sum - arr[i]) + (N - arr[i] - 1); ans = min(ans, sum); } printf("%d\n", ans); } return 0; }
相关文章推荐
- hdu 1394 Minimum Inversion Number(树状数组求逆序数)
- HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)
- HDU 1394 Minimum Inversion Number (线段树 单点更新 求逆序数)
- HDU 1394 Minimum Inversion Number(线段树求逆序数)
- hdu 1394 Minimum Inversion Number 线段树 逆序数
- HDU - 1394 _Minimum Inversion Number(归并排序求逆序数)
- HDU 1394 Minimum Inversion Number 【单节点+逆序数】
- hdu1394--Minimum Inversion Number(线段树求逆序数,纯为练习)
- hdu 1394 Minimum Inversion Number (树状数组求逆序数)
- hdu 1394 Minimum Inversion Number 线段树 逆序数
- HDU 1394 Minimum Inversion Number(归并排序 线段树 逆序数)
- HDU 1394 Minimum Inversion Number(单点更新 + 求逆序数)
- hdu 1394 Minimum Inversion Number(线段树求逆序数)
- HDU 1394 Minimum Inversion Number // 线段树求逆序数
- hdu 1394 Minimum Inversion Number 用线段树求0到n-1的排列的逆序数
- HDU 1394 Minimum Inversion Number (线段树求逆序数 )
- hdu-1394 Minimum Inversion Number(线段树求逆序数模板)
- HDU 1394- Minimum Inversion Number(线段树求逆序数)
- hdu 1394 Minimum Inversion Number (线段树求逆序数)
- hdu 1394 Minimum Inversion Number(树状数组求逆序数)