http://www.lydsy.com/JudgeOnline/problem.php?id=2212

自下而上贪心。

需要用权值线段树来记录一个权值区间内的出现次数。

合并线段树时统计逆序对的信息就可以了。

时间复杂度\(O(n\log n)\)。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll; const int N = 200003; int v[N << 1], ch[N << 1][2], n, cnt = 0, root[N << 1]; void read_tree(int x) {
scanf("%d", &v[x]);
if (v[x] == 0) {
ch[x][0] = ++cnt; read_tree(cnt);
ch[x][1] = ++cnt; read_tree(cnt);
}
} int tot = 0;
struct node {
int sum, l, r;
} T[N * 30]; void update(int &rt, int l, int r, int key) {
rt = ++tot;
++T[tot].sum;
if (l == r) return;
int mid = (l + r) >> 1;
if (key <= mid)
update(T[tot].l, l, mid, key);
else
update(T[tot].r, mid + 1, r, key);
} ll sum1, sum2, ans = 0;
int merge(int x, int y) {
if (x == 0 || y == 0) return x + y;
sum1 += 1ll * T[T[x].l].sum * T[T[y].r].sum;
sum2 += 1ll * T[T[x].r].sum * T[T[y].l].sum;
T[x].l = merge(T[x].l, T[y].l);
T[x].r = merge(T[x].r, T[y].r);
T[x].sum = T[T[x].l].sum + T[T[x].r].sum;
return x;
} void solve(int x) {
if (v[x]) return;
solve(ch[x][0]), solve(ch[x][1]);
sum1 = sum2 = 0;
root[x] = merge(root[ch[x][0]], root[ch[x][1]]);
ans += min(sum1, sum2);
} int main() {
scanf("%d", &n);
++cnt; read_tree(cnt);
for (int i = 1; i <= cnt; ++i)
if (v[i])
update(root[i], 1, n, v[i]); solve(1);
printf("%lld\n", ans);
return 0;
}

最新文章

  1. SSH远程会话管理工具 - screen使用教程
  2. 小白 安装和配置Tomcat 局域网内访问网页
  3. mysql自动添加最后修改时间
  4. JS函数创建的具体过程
  5. PAT乙级 1013. 数素数 (20)
  6. 343. Integer Break
  7. oracle 的rowid和rownum
  8. writeToFile 读写文件问题
  9. 使用iscroll4可能会遇到的问题(转:记录)
  10. 文件打包bundle
  11. [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)
  12. Android 工程集成React Native 0.44 注意点
  13. LCS最长公共子序列~dp学习~4
  14. win10下 github+hexo搭建个人博客.md
  15. 一文掌握 Linux 性能分析之网络篇(续)
  16. 对Swoole、Workerman和php自带的socket的理解
  17. 【LInux】统计某文件夹下目录的个数
  18. [Java in NetBeans] Lesson 11. While Loops
  19. validateRequest 相关的作用
  20. MSMQ 概述

热门文章

  1. 【BZOJ】3895: 取石子
  2. python学习笔记(九)之字符串
  3. PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)
  4. Django rest framework 的认证流程(源码分析)
  5. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
  6. tcp窗口机制(写的最简单精炼的文章)
  7. HDU-5384
  8. Monty Hall悖论
  9. AC日记——「HNOI2017」礼物 LiBreOJ 2020
  10. yum 安装