bzoj 3702: 二叉树 线段树合并

该博客讨论了一种特殊的二叉树结构,其中非叶子节点均有两个孩子,叶子节点权值为1到n的排列。问题要求通过交换非叶子节点的左右孩子,最小化中序遍历时的逆序对数量。博主提出采用自底向上的策略,在线段树合并过程中同时计算逆序对和顺序对,选取较少者作为目标。
摘要由CSDN通过智能技术生成

题意

现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1..n的一个排列)。可以任意交换每个非叶子节点的左右孩子。
要求进行一系列交换,使得最终所有叶子节点的权值按照中序遍历写出来,逆序对个数最少。
n<=200000

分析

自底向上,在线段树合并的时候顺便计算逆序对和顺序对的数量,取较小的一个即可。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

typedef long long LL;

const i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值