soj 2309: In the Army Now (树状数组求逆序数)
2015-11-01 16:27
441 查看
@(K ACMer)
题意:
可以发现就是求逆序数最大的哪一行
分析:
树状数组,求逆序数是非常经典的用法,当然归并排序的思想也可以来求.
每次新来一个数x我们就
题意:
可以发现就是求逆序数最大的哪一行
分析:
树状数组,求逆序数是非常经典的用法,当然归并排序的思想也可以来求.
每次新来一个数x我们就
add(x , 1);这样维护数组数组
sum[i]就表示在该数左边小于等于它的数的个数.
j - sum[i]就是大于它的个数了.
#include <iostream> #include <cstdio> #include <cstring> #include <set> #include <map> #include <stack> #include <vector> #include <string> #include <queue> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; const int mod = int(1e9) + 7, INF = 0x3fffffff, maxn = 1e4 + 40; int bit[maxn], m, n; int sum(int i) { int s = 0; while (i > 0) { s += bit[i]; i -= i & -i; } return s; } void add(int i, int x) { while (i <= n) { bit[i] += x; i += i & -i; } } int main(void) { while (~scanf("%d%d", &m, &n)) { int ans = -1, row; for (int i = 0; i < m; i++) { for (int j = 0; j <= n; j++) bit[j] = 0; int sums = 0; for (int j = 0; j < n; j++) { int x; scanf("%d", &x); sums += j - sum(x); add(x, 1); } if (sums > ans) { row = i + 1; ans = sums; } } printf("%d\n", row); } return 0; }
相关文章推荐
- Codeforces Coder-Strike 2014 - Finals (online edition, Div. 1)
- HDU 1166 敌兵布阵
- POJ 2352 Stars
- PAT 1057 Stack (30)
- poj 2352
- 树状数组
- hdu 4630 No Pain No Game 树状数组
- 树状数组区间求和的三种模型
- HDOJ1166 敌兵布阵 树状数组
- 二维树状数组
- Hoj 2275 Number Sequence
- POJ3321 Apple Tree
- BZOJ2434 [Noi2011]阿狸的打字机【AC自动机+dfs序+树状数组】
- HDU 3015
- hdu 5147
- 【转载】区间信息的维护与查询(一)——二叉索引树(Fenwick树、树状数组)
- 树状数组模板
- HLG 1400 汽车比赛
- hdu2838 Cow Sorting(树状数组)
- HDU 1556 Color the ball (简单树状数组)