HDU 1394 Minimum Inversion Number(单点更新)
2013-12-07 18:25
351 查看
转载请注明出处:忆梦http://blog.csdn.net/yimeng2013/article/details/17190083
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394线段树功能: update:单点增加 query:区间求和
跟着NotOnlySuccess大牛学线段树
#include<cstdio> #include<algorithm> using namespace std; #define lson l , m, rt << 1 #define rson m+1, r, rt<<1|1 #define maxn 5555 int sum[maxn<<2]; int num[maxn]; void PushUp(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } void build(int l, int r, int rt) { if(l == r) { sum[rt]= 0; return ; } int m = (l + r) >> 1; build(lson); build(rson); PushUp(rt); } int query(int L, int R, int l, int r, int rt) { if(L <= l && r <= R) { return sum[rt]; } int ret = 0; int m = (l + r) >> 1; if(L <= m) ret += query(L, R, lson); if(R > m) ret += query(L, R, rson); return ret; } void update(int pos, int l, int r, int rt) { if(l == r) { sum[rt]++; return; } int m = (l + r) >> 1; if(pos <= m) update(pos, lson); else update(pos, rson); PushUp(rt); } int main () { int n; while(scanf("%d", &n)!= EOF) { for(int i = 1; i <= n; i++) { scanf("%d", &num[i]); num[i]++; } build(1, n, 1); int ret = 0; for(int i = 1; i <= n; i++) { ret += query(num[i], n, 1, n, 1); update(num[i], 1, n, 1); } int ans = ret; for(int i = 1; i < n; i++) { ret += n - 2*num[i] + 1; ans = min(ans, ret); } 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(线段树:单点更新,求逆序数)
- 线段树专题#5_蒟蒻训练历程记录_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(单点更新 + 求逆序数)
- hdu1394 Minimum Inversion Number(单点更新)
- ZOJ 1484 HDU 1394 Minimum Inversion Number / 线段树单点更新
- HDU 1394 Minimum Inversion Number (线段树 单点更新 求逆序数)
- HDU1394-Minimum Inversion Number(线段树单点更新)
- HDU1394 Minimum Inversion Number(线段树单点更新)
- Minimum Inversion Number----HDU_1394----线段树之单点更新