正解:线段树合并

解题报告:

传送门!

今天学了下线段树合并,,,感觉线段树相关的应用什么的还是挺有趣的,今天晚上可能会整理一下$QAQ?$

然后直接看这道题

现在考虑对一个节点$nw$,现在已经分别处理出它的$ls$和$rs$的最少逆序对个数了,然后现在考虑要不要交换呢$QAQ$

显然不管$nw$节点的左右子树内部是怎么排列的,他们整体对外部的贡献是不变的,所以我们只要考虑内部的逆序对个数怎么样尽量小$QAQ$

这里就可以考虑对每个节点分别开一个权值线段树,然后逆序对的话可以直接在merge的时候做,树状数组都能有的功能线段树肯定也能有昂$QAQ$

等下放代码$QAQ!$

对了还要说个,就是,它的读入很鬼畜,,,又麻油翻译,,,大概就是说,它是给的一个递归形式的输入,如果是$0$,说明有左右节点,否则为叶子节点

然后这个可以用$dfs$递归读入,而且刚刚好在读入的时候顺便一起做完了$QAQ$

最后夸一下,这题,特别好,它好就好在,,,我我我$RE\&MLE$了七十多次,,,开大点儿就$MLE$小了又会$RE$,,,调了半天发现是我代码中数据类型$int$和$long\ long$的定义有问题$QAQ$

这题动画,唯一要用ll的就是逆序对的个数,其他都不要开昂$QAQ$

然后还有就是,如果有这么一句话:$a=solve();$其中a是个$int$,函数的定义写的返回类型是$ll$,这样写可能就会有一些莫名其妙的后果,所以一定要注意对应$QAQ$!如果$a$是个$int$在定义$solve$的时候一定记得定义成$int$!

没了$QAQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define gc getchar()
#define ll long long int n,nod_cnt;
ll as,ret1,ret2;
struct sgtr{int ls,rs,sz;}tr[]; il int read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
int buildnw(rg int l,rg int r,rg int dat)
{
tr[++nod_cnt].sz=;if(l==r)return nod_cnt;
rg int mid=(l+r)>>,nw=nod_cnt;if(dat<=mid)tr[nod_cnt].ls=buildnw(l,mid,dat);else tr[nod_cnt].rs=buildnw(mid+,r,dat);return nw;
}
int merge(rg int l,rg int r,rg int nw1,rg int nw2)
{
if(!nw1 || !nw2)return nw1+nw2;
if(l==r)return tr[nw1].sz=tr[nw1].sz+tr[nw2].sz,nw1;
rg int mid=(l+r)>>;
ret1+=1ll*tr[tr[nw1].rs].sz*tr[tr[nw2].ls].sz;ret2+=1ll*tr[tr[nw1].ls].sz*tr[tr[nw2].rs].sz;
tr[nw1].ls=merge(l,mid,tr[nw1].ls,tr[nw2].ls);tr[nw1].rs=merge(mid+,r,tr[nw1].rs,tr[nw2].rs);tr[nw1].sz=tr[nw1].sz+tr[nw2].sz;return nw1;
}
int rd()
{
rg int tmp=read();
if(tmp)return buildnw(,n,tmp);
rg int nw=merge(,n,rd(),rd());as+=min(ret1,ret2);ret1=ret2=;return nw;
} int main()
{
n=read();rd();printf("%lld\n",as);
return ;
}

放下代码QAQ

洛谷 P3521 ROT-Tree Rotations [POI2011] 线段树的更多相关文章

  1. 「POI2011 R2 Day2」Tree Rotations【线段树合并】

    题目链接 [BZOJ] [洛谷] [LOJ] 题解 由于是前序遍历,那么讨论一棵树上的逆序对的情况. 两个节点都在左子树上 两个节点都在右子树上 两个节点分别在不同的子树上. 前两种情况其实也可以归结 ...

  2. [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】

    题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...

  3. BZOJ 2212 [Poi2011]Tree Rotations(线段树合并)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2212 [题目大意] 给出一棵二叉树,每个叶节点上有一个权值,现在可以任意交换左右儿子, ...

  4. 【BZOJ2212】[POI2011]Tree Rotations (线段树合并)

    题解: 傻逼题 启发式合并线段树里面查$nlog^2$ 线段树合并顺便维护一下$nlogn$ 注意是叶子为n 总结点2n 代码: #include <bits/stdc++.h> usin ...

  5. bzoj 2212 : [Poi2011]Tree Rotations (线段树合并)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2212 思路:用线段树合并求出交换左右儿子之前之后逆序对的数量,如果数量变小则交换. 实现 ...

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

    题目链接 BZOJ2212 题解 一棵子树内的顺序不影响其与其它子树合并时的答案,这一点与归并排序的思想非常相似 所以我们只需单独处理每个节点的两棵子树所产生的最少逆序对即可 只有两种情况,要么正序要 ...

  7. 【洛谷3822】[NOI2017] 整数(线段树压位)

    题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 ...

  8. 洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化

    洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一 ...

  9. 洛谷P3434 [POI2006]KRA-The Disks(线段树)

    洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...

随机推荐

  1. 解决Android微信支付官方demo运行失败

    Android微信支付官方demo运行失败,在此简单记录一下解决步骤 1.httpclient错误 官方给的demo是eclipse的,打开之后提示httpclient的错误,我知道在as下解决htt ...

  2. 【Unity】ShareSDK、SMSSDK的基本使用与常见问题

    概要 测试使用ShareSDK的一些常用功能.包括: 用微博帐号做第三方登录 获取用户的帐号详细信息 获取好友列表 分享功能 测试使用SMSSDK插件,包括: 导入插件,解决包冲突 短信登录功能:发验 ...

  3. 【原】使用Json作为Python和C#混合编程时对象转换的中间文件

    一.Python中自定义类对象json字符串化的步骤[1]   1. 用 json 或者simplejson 就可以: 2.定义转换函数: 3. 定义类 4. 生成对象 5.dumps执行,引入转换函 ...

  4. 关于C#中的动态数组ArrayList

    在C#中,如果需要数组的长度和元素的个数随着程序的运行不断改变,就可以使用ArrayList类,该类是一个可以动态增减成员的数组. 一.ArrayList类与Array类的区别 ArrayList类实 ...

  5. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  6. Mac 安装HomeBrew 出错

    错误如下: error: could not lock config file /usr/local/Homebrew/.git/config: Permission denied fatal: co ...

  7. redmine增加文本输入框默认格式

    需求:击一个按钮,在文本输入区域自动生成如下图的内容: 1. 详细描述: 2. 详细步骤: 3. 期望结果: 4. 实际结果: 实现过程: 1 打开文件\apps\redmine\public\jav ...

  8. java工具类 获取包下所有类

    extends:http://blog.csdn.net/jdzms23/article/details/17550119 package com.threeti.util; import java. ...

  9. 7.9CSS总结

    2018-7-9 18:01:18 1.类选择器是 用  .      .xxx{}  (ps,公司常用的是类选择  ) 2.id选择器是用  #   #xx{}  (id选择器并不常用) 3.css ...

  10. 自定义元素 v1:可重用网络组件

    google文档 https://developers.google.cn/web/fundamentals/web-components/customelements 兼容性 https://can ...