Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)
来源:互联网 发布:华润五丰待遇知乎 编辑:程序博客网 时间:2024/05/01 10:41
The Romans have attacked again. This time they are much more than the Persians but Shapur is ready to defeat them. He says: “A lion is never afraid of a hundred sheep”.
Nevertheless Shapur has to find weaknesses in the Roman army to defeat them. So he gives the army a weakness number.
In Shapur’s opinion the weakness of an army is equal to the number of triplets i, j, k such that i < j < k and ai > aj > ak where ax is the power of man standing at position x. The Roman army has one special trait — powers of all the people in it are distinct.
Help Shapur find out how weak the Romans are.
Input
The first line of input contains a single number n (3 ≤ n ≤ 106) — the number of men in Roman army. Next line contains n different positive integers ai (1 ≤ i ≤ n, 1 ≤ ai ≤ 109) — powers of men in the Roman army.
Output
A single integer number, the weakness of the Roman army.
Please, do not use %lld specificator to read or write 64-bit integers in C++. It is preffered to use cout (also you may use %I64d).
Sample test(s)
Input
3
3 2 1
Output
1
Input
3
2 3 1
Output
0
Input
4
10 8 3 1
Output
4
Input
4
1 5 4 3
Output
1
两次树状数组维护,第一次维护求出每一个位置上的逆序数的对数
第二次维护到目前为止,插入到树状数组上的逆序对的总数目
数据较大,离散化一下
/************************************************************************* > File Name: CF-57-E.cpp > Author: ALex > Mail: zchao1995@gmail.com > Created Time: 2015年03月23日 星期一 21时00分16秒 ************************************************************************/#include <map>#include <set>#include <queue>#include <stack>#include <vector>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const double pi = acos(-1.0);const int inf = 0x3f3f3f3f;const double eps = 1e-15;typedef long long LL;typedef pair <int, int> PLL;const int N = 1010000;LL tree[N];LL inver[N];int val[N];LL pre[N];int xis[N];int cnt;int binsearch(int x){ int l = 1; int r = cnt; int mid; while (l <= r) { mid = (l + r) >> 1; if (xis[mid] > x) { r = mid - 1; } else if (xis[mid] < x) { l = mid + 1; } else { break; } } return mid;}int lowbit(int x){ return x & (-x);}void add(int x, int cnt){ for (int i = x; i <= N; i += lowbit(i)) { tree[i] += cnt; }}LL sum(int x){ LL ans = 0; for (int i = x; i; i -= lowbit(i)) { ans += tree[i]; } return ans;}int main(){ int n; while (~scanf("%d", &n)) { cnt = 0; LL ans = 0; memset(pre, 0, sizeof(pre)); memset(inver, 0, sizeof(inver)); memset(tree, 0, sizeof(tree)); for (int i = 1; i <= n; ++i) { scanf("%d", &val[i]); xis[++cnt] = val[i]; } sort(xis + 1, xis + 1 + cnt); cnt = unique(xis + 1, xis + 1 + cnt) - xis - 1; for (int i = 1; i <= n; ++i) { int x = binsearch(val[i]); add(x, 1); inver[i] = i - sum(x); pre[i] = pre[i - 1] + inver[i]; } memset(tree, 0, sizeof(tree)); for (int i = 1; i <= n; ++i) { int x = binsearch(val[i]); add(x, inver[i]); ans += pre[i] - sum(x); } printf("%lld\n", ans); } return 0;}
- Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)
- Codeforces Beta Round #57 (Div. 2) E. Enemy is weak
- Codeforces Beta Round #57 (Div. 2) Enemy is weak
- CodeForces 61E Enemy is weak 【树状数组】
- Codeforces Round #301 (Div. 2)E(树状数组+离散化)
- Codeforces Round #401 (Div. 2) E 离散化 + 树状数组/线段树
- Enemy is weak 树状数组
- CF - 61E - Enemy is weak(树状数组)
- Codeforces 61E Enemy is weak 求i<j<k && a[i]>a[j]>a[k] 的对数 树状数组
- Codeforces Round #431 (Div. 2) E. Goodbye Souvenir CDQ分治 或 离散化 线段树套树状数组
- CodeForces - 61E Enemy is weak
- cf 61E. Enemy is weak 树状数组求逆序数
- cf 61E. Enemy is weak 树状数组求逆序数(WA)
- 树状数组Codeforces Round #301 (Div. 2) E - Infinite Inversions
- Codeforces Round #368 (Div. 2) E. Garlands (树状数组)
- Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组
- Codeforces Round #368 (Div. 2) E. Garlands(二维树状数组)
- Codeforces Round #423 (Div. 2) E. DNA Evolution(树状数组)
- Jsoup模拟登陆小例子
- Eclipse安装反编译工具
- Codeforces Round #295 (Div. 2) A. Pangram
- 最简单的视频网站(JavaEE+FFmpeg)
- expect脚本入门
- Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)
- Unity与全息投影
- 经典算法-汉诺塔
- Jsoup登录解析网页信息
- Android架构(一)
- table 固定表头、列头
- 互斥锁与条件变量的配合!
- POJ 3169 Layout (Bellman-Ford、差分约束)
- freemarker技术入门例子(结合struts2)