【BZOJ 2212】【POI 2011】Tree Rotations
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的更多相关文章
- 【BZOJ 2216】【POI 2011】Lightning Conductor
http://www.lydsy.com/JudgeOnline/problem.php?id=2216 学习了一下决策单调性. 这道题决策单调性比较明显,不详细证了. 对于一个决策i,如果在i之前的 ...
- [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】
题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【POI xlsx】使用POI对xlsx的单元格样式进行设置 / 使用POI对xlsx的字体进行设置
涉及到的样式都在代码中有说明: package com.it.poiTest; import java.io.FileNotFoundException; import java.io.FileOut ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】【2084】【POI2010】Antisymmetry
Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
随机推荐
- 【游记】GDOI 2017
Day 0 学校好大>_<! 酒店好高级>_<! 晚上复习代码的时候很困QAQ,中间和hwh面基.复习到SA的时候因为太久没看忘记板子的意思了又背不下来,于是不看了,相信考了也 ...
- 【BZOJ】1202: [HNOI2005]狡猾的商人
[题意]w组数据,给定n和m,给出m段区间[s,t](1<=s<=t<=n)的数字和,求是否矛盾.n<100,m<1000,w<100. [算法]带权并查集 [题解 ...
- js获取屏幕高度宽度
获取各种屏幕的宽度和高度Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽 ...
- 制作Solaris系统的USB启动盘
制作方法: 1. wget http://192.168.2.5/surefiler-installer/2011-12-09/devel-2011.12.9.tgz 2. cd /root tar ...
- hdu 1217 Arbitrage (spfa算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No. 这里介绍一个ST ...
- xrange和range的区别
>>> print type(range(5)) <type 'list'> >>> print type(xrange(5)) <type 'x ...
- 前端—css
css css概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一.css的四种引入方式: 1.行内式 ...
- DTW 算法(转)
DTW为(Dynamic Time Warping,动态时间归准)的简称.应用很广,主要是在模板匹配中,比如说用在孤立词语音识别,计算机视觉中的行为识别,信息检索等中.可能大家学过这些类似的课程都看到 ...
- Linux 入门记录:二、Linux 文件系统基本结构
一.树状目录结构 Linux 文件系统是一个倒置的单根树状结构.文件系统的根为"/":文件名严格区分大小写:路径使用"/"分割(Windows 中使用" ...
- 安全测试===sqlmap(肆)转载
十八.杂项 1.使用简写 参数:-z 有些参数组合是被经常用到的,如“--batch --random-agent --ignore-proxy --technique=BEU”,这样写一大串很不好看 ...