发现x的子树在后续处理中不会影响逆序对的情况(只关心有哪些值,相对位置已经不重要了)

f[x]表示x为根的子树最小逆序对数

考虑左右儿子交换与否。

暴力是O(n^2)的

考虑线段树合并

左右儿子线段树合并的时候,直接类似于分治,记录另一棵数小于某个数的个数,

选择代价小的放在前面

具体看代码:

1.x,y别写错。。。

2.开long long,而且线段树可能存在一个点的sz大于n,乘起来会爆int

#include<bits/stdc++.h>
#define reg register int
#define mid ((l+r)>>1)
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
int n,ch[*N][];
struct tr{
int ls,rs;
int sz;
}t[*N];
int tot;
void pushup(int x){
t[x].sz=t[t[x].ls].sz+t[t[x].rs].sz;
}
ll xfsz,yfsz;
int rt[*N],m;
ll f[*N];
int merge(int x,int y,int l,int r){
if(!x||!y) return x+y;
if(l==r){
t[x].sz+=t[y].sz;
return x;
}
xfsz+=(ll)t[t[x].rs].sz*t[t[y].ls].sz;
yfsz+=(ll)t[t[y].rs].sz*t[t[x].ls].sz;
t[x].ls=merge(t[x].ls,t[y].ls,l,mid);
t[x].rs=merge(t[x].rs,t[y].rs,mid+,r);
pushup(x);
return x;
}
void upda(int &x,int l,int r,int p){
if(!x) x=++tot;
if(l==r){
t[x].sz=;
return;
}
if(p<=mid) upda(t[x].ls,l,mid,p);
else upda(t[x].rs,mid+,r,p);
pushup(x);
}
void build(int &x){
x=++m;
int val;rd(val);
if(val==){
build(ch[x][]);build(ch[x][]);
}else{
upda(rt[x],,n,val);
}
}
void dfs(int x){
if(ch[x][]&&ch[x][]){
dfs(ch[x][]),dfs(ch[x][]);
// cout<<" back to "<<x<<endl;
xfsz=;yfsz=;
rt[x]=rt[ch[x][]];
rt[x]=merge(rt[x],rt[ch[x][]],,n);
f[x]=f[ch[x][]]+f[ch[x][]]+min(xfsz,yfsz);
// cout<<" xfsz "<<xfsz<<" yfsz "<<yfsz<<endl;
// cout<<" f[x] "<<f[x]<<endl;
}
}
int main(){
rd(n);
int haha;
build(haha);
dfs();
printf("%lld\n",f[]);
return ;
} }
signed main(){
// freopen("4.in","r",stdin);
// freopen("4.out","w",stdout);
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/2/10 11:57:09
*/

[POI2011]ROT-Tree Rotations的更多相关文章

  1. BZOJ2212: [Poi2011]Tree Rotations

    2212: [Poi2011]Tree Rotations Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 391  Solved: 127[Submi ...

  2. BZOJ 2212: [Poi2011]Tree Rotations( 线段树 )

    线段树的合并..对于一个点x, 我们只需考虑是否需要交换左右儿子, 递归处理左右儿子. #include<bits/stdc++.h> using namespace std; #defi ...

  3. 2212: [Poi2011]Tree Rotations

    2212: [Poi2011]Tree Rotations https://www.lydsy.com/JudgeOnline/problem.php?id=2212 分析: 线段树合并. 首先对每个 ...

  4. 【BZOJ2212】[Poi2011]Tree Rotations 线段树合并

    [BZOJ2212][Poi2011]Tree Rotations Description Byteasar the gardener is growing a rare tree called Ro ...

  5. POI2011 Tree Rotations

    POI2011 Tree Rotations 给定一个n<=2e5个叶子的二叉树,可以交换每个点的左右子树.要求前序遍历叶子的逆序对最少. 由于对于当前结点x,交换左右子树,对于范围之外的逆序对 ...

  6. [bzoj3702/2212][Poi2011]二叉树/Tree Rotations_线段树

    二叉树 Tree Rotations bzoj-3702 bzoj-2212 Poi-2011 题目大意:现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有n个叶子节点,满足 ...

  7. bzoj 2212 Tree Rotations

    bzoj 2212 Tree Rotations 考虑一个子树 \(x\) 的左右儿子分别为 \(ls,rs\) .那么子树 \(x\) 内的逆序对数就是 \(ls\) 内的逆序对数,\(rs\) 内 ...

  8. 线段树合并(【POI2011】ROT-Tree Rotations)

    线段树合并([POI2011]ROT-Tree Rotations) 题意 现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有nn个叶子节点,满足这些权值为1-n1-n的一个 ...

  9. bzoj 2212: [Poi2011]Tree Rotations

    Description Byteasar the gardener is growing a rare tree called Rotatus Informatikus. It has some in ...

  10. 【bzoj2212】[Poi2011]Tree Rotations 权值线段树合并

    原文地址:http://www.cnblogs.com/GXZlegend/p/6826614.html 题目描述 Byteasar the gardener is growing a rare tr ...

随机推荐

  1. could not launch process: decoding dwarf section info at offset 0x0: too short

    Fabric调试异常 作者在使用chaincode进行智能合约开发的过程中,使用Goland + Golang + win10_X64作为开发环境: GoLand 2018.1.4 Build #GO ...

  2. python数据分析系列(2)--numpy

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  3. linux 其他知识目录

    博客目录总纲首页 为博客园添加目录的方法总结 linux 命令自动补全包 手动配置网卡 nginx日志统计 Linux 深入理解inode/block/superblock /proc/sys目录下各 ...

  4. Oracle和MySQL插入时获取主键

    这里只写selectKey方法的 一,Oracle数据库中的写法 order="BEFORE"因为oracle中需要先从序列获取值,然后将值作为主键插入到数据库中 <sele ...

  5. Daily Scrum 11.7

    明后两天周六日,按照TFS的日常安排应该是休息,所以让他们自由完成已经分配的任务. 姓名 今日任务 黄新越 提取爬取网页的关键字并输出到接口 刘垚鹏 程序总架构的修改与多线程的学习 王骜 多线程学习 ...

  6. JAVA第一次实验 ——凯撒密码

    课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.15 实验密级: 预习程度:  实验时间:19: ...

  7. Leetcode题库——3.无重复字符的最长子串

    @author: ZZQ @software: PyCharm @file: lengthOfLongestSubstring.py @time: 2018/9/18 20:35 要求:给定一个字符串 ...

  8. 【大数据应用技术】作业八|爬虫综合大作业Molly134

    本次作业的要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 前言:本次作业是爬取CBO中国票房2010-2019年每年 ...

  9. angularJS1笔记-(7)-控制器的合理使用(显示和隐式的依赖注入)

    AngularJS依赖注入 1.隐式注入:不需要开发人员干预,angularJS自动根据参数的名称识别和注入数据 app.controller("myCtrl".function( ...

  10. Java网络编程一:基础知识详解

    网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------ ...