hdu 1394 Minimum Inversion Number 线段树
2014-02-01 23:00
316 查看
代码出自http://www.notonlysuccess.com/index.php/segment-tree-complete/
#include <cstdio> #include <algorithm> using namespace std; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 5555; int sum[maxn<<2]; void PushUP(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } void build(int l,int r,int rt) { sum[rt] = 0; if (l == r) return ; int m = (l + r) >> 1; build(lson); build(rson); } void update(int p,int l,int r,int rt) { if (l == r) { sum[rt] ++; return ; } int m = (l + r) >> 1; if (p <= m) update(p , lson); else update(p , rson); PushUP(rt); } int query(int L,int R,int l,int r,int rt) { if (L <= l && r <= R) { return sum[rt]; } int m = (l + r) >> 1; int ret = 0; if (L <= m) ret += query(L , R , lson); if (R > m) ret += query(L , R , rson); return ret; } int x[maxn]; int main() { int n; while (~scanf("%d",&n)) { build(0 , n - 1 , 1); int sum = 0; for (int i = 0 ; i < n ; i ++) { scanf("%d",&x[i]); sum += query(x[i] , n - 1 , 0 , n - 1 , 1); update(x[i] , 0 , n - 1 , 1); } int ret = sum; for (int i = 0 ; i < n ; i ++) { sum += n - x[i] - x[i] - 1; ret = min(ret , sum); } printf("%d\n",ret); } return 0; }
相关文章推荐
- HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)
- HDU 1394 Minimum Inversion NumberMinimum Inversion Number(线段树)
- [HDU] 1394 Minimum Inversion Number [线段树求逆序数]
- 【线段树】HDU 1394 Minimum Inversion Number
- 线段树专题#5_蒟蒻训练历程记录_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(线段树求逆序数)
- HDU 1394 Minimum Inversion NumberMinimum Inversion Number(线段树)
- hdu 1394 Minimum Inversion Number 线段树求逆序数
- HDU 1394 Minimum Inversion Number (归并排序 | 线段树 | 数状数组)
- HDU 1394 Minimum Inversion Number (暴力+线段树)