bzoj2212[Poi2011]Tree Rotations [线段树合并]
题面
ans = 两子树ans + min(左子在前逆序对数, 右子在前逆序对数)
线段树合并
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#define Sqr(x) ((x)*(x))
using namespace std;
const int N = 2e5 + 5;
const int M = 4e6 + 5;
long long cnt1, cnt2;
struct Seg{
int w[M], sz, ls[M], rs[M];
void ins(int l, int r, int x, int &rt){
if(!rt) rt = ++sz;
if(l == r) {w[rt] = 1; return ;}
int mid = l + ((r - l) >> 1);
if(x <= mid) ins(l, mid, x, ls[rt]);
else ins(mid + 1, r, x, rs[rt]);
w[rt] = w[ls[rt]] + w[rs[rt]];
}
int merge(int x, int y){
if(!x || !y) return x + y;
cnt1 += 1ll * w[ls[x]] * w[rs[y]];
cnt2 += 1ll * w[rs[x]] * w[ls[y]];
ls[x] = merge(ls[x], ls[y]);
rs[x] = merge(rs[x], rs[y]);
w[x] = w[ls[x]] + w[rs[x]];
return x;
}
}seg;
int n, m, sz, rt[N << 2], l[N << 2], r[N << 2], w[N << 2];
void init(int &cur){
cur = ++sz;
scanf("%d", &w[cur]);
if(!w[cur]) {init(l[cur]); init(r[cur]);}
else seg.ins(1, n, w[cur], rt[cur]);
}
long long solve(int cur){
if(w[cur]) return 0;//如果不在叶子节点停下 叶子就会被合并成空树
long long res = solve(l[cur]) + solve(r[cur]);
//printf("%d %lld %d %d\n", cur, res, l[cur], r[cur]);
cnt1 = cnt2 = 0;
rt[cur] = seg.merge(rt[l[cur]], rt[r[cur]]);
//printf("%lld %lld\n", cnt1, cnt2);
return res + min(cnt1, cnt2);
}
int main() {
scanf("%d", &n);
init(m);
printf("%lld\n", solve(m));
//system("PAUSE");
return 0;
}
/*
检查所有的int函数是否有返回值
*/
bzoj2212[Poi2011]Tree Rotations [线段树合并]的更多相关文章
- BZOJ2212 [Poi2011]Tree Rotations 线段树合并 逆序对
原文链接http://www.cnblogs.com/zhouzhendong/p/8079786.html 题目传送门 - BZOJ2212 题意概括 给一棵n(1≤n≤200000个叶子的二叉树, ...
- 【BZOJ2212】[Poi2011]Tree Rotations 线段树合并
[BZOJ2212][Poi2011]Tree Rotations Description Byteasar the gardener is growing a rare tree called Ro ...
- BZOJ.2212.[POI2011]Tree Rotations(线段树合并)
题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...
- Bzoj P2212 [Poi2011]Tree Rotations | 线段树合并
题目链接 通过观察与思考,我们可以发现,交换一个结点的两棵子树,只对这两棵子树内的节点的逆序对个数有影响,对这两棵子树以外的节点是没有影响的.嗯,然后呢?(っ•̀ω•́)っ 然后,我们就可以对于每一个 ...
- bzoj2212/3702 [Poi2011]Tree Rotations 线段树合并
Description Byteasar the gardener is growing a rare tree called Rotatus Informatikus. It has some in ...
- BZOJ_2212_[Poi2011]Tree Rotations_线段树合并
BZOJ_2212_[Poi2011]Tree Rotations_线段树合并 Description Byteasar the gardener is growing a rare tree cal ...
- [bzoj2212]Tree Rotations(线段树合并)
解题关键:线段树合并模板题.线段树合并的题目一般都是权值线段树,因为结构相同,求逆序对时,遍历权值线段树的过程就是遍历所有mid的过程,所有能求出所有逆序对. #include<iostream ...
- BZOJ 2212: [Poi2011]Tree Rotations( 线段树 )
线段树的合并..对于一个点x, 我们只需考虑是否需要交换左右儿子, 递归处理左右儿子. #include<bits/stdc++.h> using namespace std; #defi ...
- [POI2011]ROT-Tree Rotations 线段树合并|主席树 / 逆序对
题目[POI2011]ROT-Tree Rotations [Description] 现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有\(n\)个叶子节点,满足这些权值为 ...
随机推荐
- B. Switches and Lamps
链接 [https://codeforces.com/contest/985/problem/B] 题意 给你n,m,分别是n个开关,m个灯 给一个n*m的字符矩阵aij=1,表示i可以控制j这个灯 ...
- A+B大数运算
基础加法大数运算: [https://vjudge.net/problem/HDU-1002] 题目: 输入两个长度不超过1000的整数求出sum. 思路: 由于数字很大不能直接加,用字符串形式输入, ...
- An error occurred while updating the entries. See the inner exception for details.
EF插入或更新数据时出现错误提示:An error occurred while updating the entries. See the inner exception for details.的 ...
- 学习docker——命令总结
安装docker的方法可以参考:Ubuntu.CentOS.Windows.MacOS 查看版本信息 → ~ $ docker --version Docker version 18.03.1-ce, ...
- Java中List集合去除重复数据的四种方法
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < lis ...
- AssemblyScript的测试
详细文档介绍 export function f(x: i32): i32 { if (x === 1 || x === 2) { return 1; } return f(x - 1) + f(x ...
- python之路--类与类之间的关系
类和类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...
- django_filter,Search_Filter,Order_Filter,分页
一.分页drf配置信息: 1.在Lib\site-packages\rest_framework\settings.py中查看: 2.简单分页在项目setting中配置:(所有get请求返回数据每页5 ...
- React Native & Android & iOS
React Native & Android & iOS React Native & Android & iOS https://facebook.github.io ...
- python设计模式第二十二天【备忘录模式】
1.应用场景 (1)能保存对象的状态,并能够恢复到之前的状态 2.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ class Originator ...