hdu 2689 Sort it(线段树)
来源:互联网 发布:淘宝网购物如何退货 编辑:程序博客网 时间:2024/05/15 23:52
题目链接:hdu 2689 Sort it
题目大意:求逆序对数。
解题思路:用水水的线段树做了一下。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1005;#define lson(x) ((x)<<1)#define rson(x) (((x)<<1)|1)int lc[maxn << 2], rc[maxn << 2], s[maxn << 2];inline void pushup(int u) { s[u] = s[lson(u)] + s[rson(u)];}void build (int u, int l, int r) { lc[u] = l; rc[u] = r; s[u] = 0; if (l == r) return; int mid = (l + r) >> 1; build(lson(u), l, mid); build(rson(u), mid + 1, r); pushup(u);}void modify(int u, int x, int w) { if (x == lc[u] && rc[u] == x) { s[u] += w; return; } int mid = (lc[u] + rc[u]) >> 1; if (x <= mid) modify(lson(u), x, w); else modify(rson(u), x, w); pushup(u);}int query(int u, int l, int r) { if (l <= lc[u] && rc[u] <= r) return s[u]; int mid = (lc[u] + rc[u]) >> 1, ret = 0; if (l <= mid) ret += query(lson(u), l, r); if (r > mid) ret += query(rson(u), l, r); return ret;}int N, arr[maxn];int main () { while (scanf("%d", &N) == 1) { build (1, 0, 1000); for (int i = 1; i <= N; i++) scanf("%d", &arr[i]); int ans = 0; for (int i = N; i; i--) { ans += query(1, 0, arr[i]); modify(1, arr[i], 1); } printf("%d\n", ans); } return 0;}
0 0
- hdu 2689 Sort it(线段树)
- hdu 2689 Sort it
- hdu 2689 Sort it
- HDU 2689 Sort it
- HDU-2689-Sort it
- hdu 2689 Sort it
- Sort it hdu 2689
- HDU 2689 Sort it
- hdu 2689 Sort it
- HDU-2689-Sort it
- hdu 2689 Sort it
- hdu 2689 sort it
- 【HDU 2689】【水题】Sort it
- HDU-5775-Bubble Sort(线段树)
- HDU 5775 Bubble Sort(线段树)
- 杭电ACM HDU 2689 Sort it
- HDU 2689 sort it - from lanshui_Yang
- HDU 2689 Sort it (树状数组)
- 黑马程序员_计算机与java的基础知识
- C++非const的引用不能指向临时对象
- 深入理解JVM、Java内存分配、管理小结
- Erlang---启动参数学习
- vim读取windows下的中文文本文件编码问题
- hdu 2689 Sort it(线段树)
- 第9周项目5(1)-程序填充题
- 【javascript 笔记】<一>
- HDu 5074 Hatsune Miku
- 项目之开发模式
- 突然发现fibnacci数列数列
- 黑马程序员--OC--内存管理(二)
- linux环境下C语言中sleep的问题
- Android接口调用控制