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;
}

【BZOJ 2212】【POI 2011】Tree Rotations的更多相关文章

  1. 【BZOJ 2216】【POI 2011】Lightning Conductor

    http://www.lydsy.com/JudgeOnline/problem.php?id=2216 学习了一下决策单调性. 这道题决策单调性比较明显,不详细证了. 对于一个决策i,如果在i之前的 ...

  2. [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】

    题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...

  3. 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护

    线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...

  4. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  5. 【POI xlsx】使用POI对xlsx的单元格样式进行设置 / 使用POI对xlsx的字体进行设置

    涉及到的样式都在代码中有说明: package com.it.poiTest; import java.io.FileNotFoundException; import java.io.FileOut ...

  6. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  7. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  8. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  9. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

随机推荐

  1. Farey Sequence (欧拉函数+前缀和)

    题目链接:http://poj.org/problem?id=2478 Description The Farey Sequence Fn for any integer n with n >= ...

  2. JS对象操作

    一.String常用操作 1.截取 substr(start,length) //返回从指定位置开始的指定长度的字符串. substring(start,end) //返回两个指定的位置之间的字符串. ...

  3. bzoj 1588 bst

    用set存下就好了. /************************************************************** Problem: 1588 User: BLADE ...

  4. 浅谈游戏中BUFF的设计要点

    其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时候,它就滚一边去了. 废话不多说切入正题: 游戏中的BUFF/DEBUFF我们见过很多, ...

  5. 【Matlab】使用Matlab运行Windows命令

    可以使用Matlab的一些命令来帮助程序运行.比如说 ! calc % 打开计算器 ! mspaint % 打开画图 dos calc % 打开计算器 比如一个程序要运行很长时间,而我们又不能一直守在 ...

  6. 为什么IO多路复用需要采用非阻塞式IO

    近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述 ...

  7. 浅析MongoDB用户管理

    浅析MongoDB用户管理 http://www.jb51.net/article/53830.htm mongodb3.03开启认证 http://21jhf.iteye.com/blog/2216 ...

  8. qgis 插件开发

    qgis 插件开发 http://blog.csdn.net/v6543210/article/details/40480341

  9. 2017多校第10场 HDU 6172 Array Challenge 猜公式,矩阵幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6172 题意:如题. 解法: #include <bits/stdc++.h> using ...

  10. Smarty模板快速入门

    文件下载 1.下载地址:http://www.smarty.net/ 2.我下载的版本是3.1.27 ,将下载的文件smarty-3.1.27.zip解压出来,然后将libs文件夹的所有文件复制到你的 ...