#include "algorithm"
#include "cstring"
#include "iostream"
using
namespace
std;
void
update(
int
* Tree,
int
index,
int
s,
int
e,
int
num)
{
if
(s == num and e == num) {
Tree[index] = 1;
return
;
}
if
(num < s or num > e) {
return
;
}
int
mid = (s + e) >> 1;
update(Tree, 2 * index, s, mid, num);
update(Tree, 2 * index + 1, mid + 1, e, num);
Tree[index] = Tree[2 * index] + Tree[2 * index + 1];
}
int
query(
int
* Tree,
int
index,
int
s,
int
e,
int
qs,
int
qe)
{
if
(qs <= s and e <= qe) {
return
Tree[index];
}
if
(s > qe or e < qs) {
return
0;
}
int
mid = (s + e) >> 1;
return
query(Tree, 2 * index, s,
mid, qs, qe)
+ query(Tree, 2 * index + 1,
mid + 1, e, qs, qe);
}
int
main(
int
argc,
char
const
* argv[])
{
int
arr[] = { 8, 4, 2, 1 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
int
mx = *max_element(arr, arr + n);
int
Tree[6 * mx];
memset
(Tree, 0,
sizeof
(Tree));
int
answer = 0;
for
(
int
i = 0; i < n; ++i) {
answer += query(Tree, 1, 1, mx, arr[i] + 1, mx);
update(Tree, 1, 1, mx, arr[i]);
}
cout << answer;
return
0;
}