P3521 [POI2011]ROT-Tree Rotations

题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少。

大体给出方式:

第一行一个正整数\(n\),表示该二叉树的叶节点的个数;

下面若干行,每行一个数\(p\):

如果\(p=0\),表示这个节点不是叶节点,递归地向下读入其左孩子和右孩子的信息;

如果\(p \neq 0\) ,表示这个节点是叶节点,权值为\(p\) 。


本来想学一下启发式合并的,结果被一个很神奇的错误卡了很久。。

启发式合并的复杂度没怎么学会,只是大致知道权值线段树的合并和相同的节点数量成正相关,反正把只有一条链的权值线段树都合起来的复杂度是\(O(nlogn)\)的

不过在最后出现了一个神奇的错误

10分:

int dfs()
{
scanf("%d",&k);
if(k) return build(1,n,k);
s1=s2=0;
int now=Merge(dfs(),dfs());
ans+=min(s1,s2);
return now;
}

100分:

int dfs()
{
scanf("%d",&k);
if(k) return build(1,n,k);
int now=Merge(dfs(),dfs());
ans+=min(s1,s2);
s1=s2=0;
return now;
}

注意递归时赋初值该在什么时候搞


Code:

#include <cstdio>
#define ll long long
#define ls ch[now][0]
#define rs ch[now][1]
const int N=200000;
ll min(ll x,ll y){return x<y?x:y;}
int ch[N*25][2],n,k,tot;
ll sum[N*25],ans,s1,s2;
int build(int l,int r,int pos)
{
int now=++tot;
sum[now]++;
if(l==r) return now;
int mid=l+r>>1;
if(pos<=mid)
ls=build(l,mid,pos);
else
rs=build(mid+1,r,pos);
return now;
}
int Merge(int x,int y)
{
if(!x||!y) return x+y;
sum[x]+=sum[y];
s1+=sum[ch[x][1]]*sum[ch[y][0]];
s2+=sum[ch[x][0]]*sum[ch[y][1]];
ch[x][0]=Merge(ch[x][0],ch[y][0]);
ch[x][1]=Merge(ch[x][1],ch[y][1]);
return x;
}
int dfs()
{
scanf("%d",&k);
if(k) return build(1,n,k);
int now=Merge(dfs(),dfs());
ans+=min(s1,s2);
s1=s2=0;
return now;
}
int main()
{
scanf("%d",&n);
dfs();
printf("%lld\n",ans);
return 0;
}

2018.7.30

洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告的更多相关文章

  1. 洛谷 P1501 [国家集训队]Tree II 解题报告

    P1501 [国家集训队]Tree II 题目描述 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\( ...

  2. 洛谷 P2323 [HNOI2006]公路修建问题 解题报告

    P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...

  3. [洛谷P3521][POI2011]ROT-Tree Rotations

    题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换 ...

  4. 洛谷P3521 [POI2011]ROT-Tree Rotation [线段树合并]

    题目传送门 Tree Rotation 题目描述 Byteasar the gardener is growing a rare tree called Rotatus Informatikus. I ...

  5. 洛谷 P1852 [国家集训队]跳跳棋 解题报告

    P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...

  6. 洛谷 P3299 [SDOI2013]保护出题人 解题报告

    P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...

  7. 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告

    P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...

  8. 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告

    P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串,定义两个串相等为"长度相同,且一个串每个数加某个数与另一个串完全相同",求所有串的最长公 ...

  9. 洛谷 P2774 方格取数问题 解题报告

    P2774 方格取数问题 题目背景 none! 题目描述 在一个有 \(m*n\) 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...

随机推荐

  1. Python 发邮件例子

    Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Autho ...

  2. UniMelb Comp30022 IT Project (Capstone) - 1.Android入门

    1. Android入门 Android系统架构 Android系统:四层架构.五块区域 1. Linux内核层 Linux Kernel:为Android设备的硬件提供了底层驱动 2. 系统运行库层 ...

  3. 小程序解析html和富文本编辑内容【亲测有效】

    首先去 https://github.com/icindy/wxParse 下载wxParse,只拷贝wxParse文件夹即可. 1.引入wxss @import "../../util/w ...

  4. Android开发-API指南-<receiver>

    <receiver> 英文原文:http://developer.android.com/guide/topics/manifest/receiver-element.html 采集(更新 ...

  5. Laxcus大数据管理系统2.0(12)- 第十章 运行

    第十章 运行 本章将介绍一些Laxcus集群基本运行.使用情况,结合图片和表格表示.地点是我们的大数据实验室,使用我们的实验集群.数据来自于我们的合作伙伴,软件平台混合了Windows和Fedora  ...

  6. python—IDLE的shell上下翻看历史

    Alt+p和Alt+n,分别向上(history previous)和向下(history next)调出使用过的历史命令.

  7. C#通过gridview导出excel

    [CustomAuthorize]        public FileResult ExportQuestionCenterExcel(SearchBaseQuestion search)      ...

  8. struts2 result type属性说明

    首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-type name="chain" ...

  9. Python3 数据类型-字符串

    字符串是 Python 中最常用的数据类型,是一个个字符组成的有序的序列,是字符的集合. 一 字符串定义 创建字符串很简单,可以使用引号('或"或""")来创建 ...

  10. svn升级(mac)

    原文链接:http://www.jianshu.com/p/c81712ecccb8 升级前 svn版本1.7.20 升级之后 1.9.2 步骤: 1. 下载最新版svn,链接:http://www. ...