[Poi2011]Tree Rotations线段树合并

整理一下线段树合并的思路,大体是给每个树上节点分配一个根编号建一棵log长的权值线段树,一开始树上只有这个树节点的节点权

merge两个树节点的时候,对于当前合并的值域(例如两棵线段树的表示1到n/2的节点),

任意取两棵树中的一个节点编号,空的返回另一个,把树丰满起来,同时更新一下计数就可以了

#include<bits/stdc++.h>  
//#pragma comment(linker, "/STACK:1024000000,1024000000")   
#include<stdio.h>  
#include<algorithm>  
#include<queue>  
#include<string.h>  
#include<iostream>  
#include<math.h>                    
#include<stack>
#include<set>  
#include<map>  
#include<vector>  
#include<iomanip> 
#include<bitset>
using namespace std;         //#define ll long long  
#define ull unsigned long long
#define pb push_back  
#define FOR(a) for(int i=1;i<=a;i++) 
#define sqr(a) (a)*(a)
#define dis(a,b) sqrt(sqr(a.x-b.x)+sqr(a.y-b.y))
ll qp(ll a,ll b,ll mod){ll t=1;while(b){if(b&1)t=t*a%mod;b>>=1;a=a*a%mod;}return t;
}
struct DOT{ll x;ll y;};
inline void read(int &x){int k=0;char f=1;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())k=k*10+c-'0';x=k*f;} 
const int dx[4]={0,0,-1,1};
const int dy[4]={1,-1,0,0};
const int inf=0x3f3f3f3f; 
const ll Linf=0x3f3f3f3f3f3f3f3f;
const ll mod=1e9+7;;const int maxn=8e6+34;int RT;
int n,a[maxn];int seg;
int tree[maxn],lson[maxn],rson[maxn];
int root[maxn];vector<int>G[maxn];
int Time;void pushup(int rt){tree[rt]=tree[lson[rt]]+tree[rson[rt]];}
void build(int &rt,int l,int r,int pos){rt=++seg;if(l==r){tree[rt]=1;return;}int m=l+r>>1;if(pos<=m)build(lson[rt],l,m,pos);else build(rson[rt],m+1,r,pos);pushup(rt);
}
ll ans,ans1,ans2;int merge(int x,int y){if(!x)return y;if(!y)return x;ans1+=1ll*tree[rson[x]]*tree[lson[y]];ans2+=1ll*tree[lson[x]]*tree[rson[y]];lson[x]=merge(lson[x],lson[y]);rson[x]=merge(rson[x],rson[y]);pushup(x);return x;
}void dfs(int u){if(a[u])return;dfs(G[u][0]);dfs(G[u][1]);ans1=ans2=0;root[u]=merge(root[G[u][0]],root[G[u][1]]);ans+=min(ans1,ans2);
}void init(int &rt){rt=++Time;scanf("%d",&a[Time]);if(a[Time])return;G[rt].pb(0);G[rt].pb(0);init(G[rt][0]);init(G[rt][1]);
}int main(){scanf("%d",&n);init(RT);for(int i=1;i<=Time;i++){if(a[i])build(root[i],1,n,a[i]);}dfs(RT);printf("%lld\n",ans);
}

转载于:https://www.cnblogs.com/Drenight/p/8611191.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word activex部件不能创建对象_如何用Word批量制作员工工作证?1分钟搞定1000份!只需三步...

工作证是我们工作中很常见的东西&#xff0c;不过由于每个人的名字、部门、照片都不同&#xff0c;很多小伙伴都不知道怎么批量制作&#xff0c;总是傻傻地一张一张制作&#xff0c;这样特别浪费时间&#xff0c;今天小编就来跟大家分享如何批量制作&#xff01;一、准备工作1、…

【Hadoop系列】HDFS

Hadoop的前世今生 什么是大数据 各行各业都会产生大量的数据&#xff0c;比如社交网站的意见观点&#xff0c;电商平台人们浏览网页停留的时间&#xff0c;交通运输每天产生的数据等等。这些数据大多不是结构化的&#xff0c;一般来说都是半结构化或者非结构化的 在以前&#x…

phpstudy使用(80端口被system占用,无法关闭和删除)

在使用phpstudy的时候直接一键启动&#xff0c;显示提示80端口已被占用&#xff0c;在尝试关闭和删除后显示被system占用&#xff0c;无法关闭。 这里我首先试着去用任务管理器彻底关闭删除这个进程&#xff0c;后来发现提示&#xff0c;如果删除可能会影响系统正常运行&#…

kingbase自带的驱动在哪_德国制造到底强在哪?从工博会上伺服驱动的创新上能看出真相!...

随着2014年协作机器人在中国兴起&#xff0c;UR、新松、达明、遨博、大族激光等企业积极布局协作机器人市场。2014-2019年&#xff0c;我国协作机器人销量复合增速一度超过了50%&#xff0c;2019年我国协作机器人产量超过8000台。但目前协作机器人和AGV的核心零部件高端市场&am…

phpstudy(自己电脑主机做服务器,手机网站界面打不开)

可能有多种原因&#xff0c; 1.手机电脑并没有连接同一个局域网。 2.我这里是因为修改了80端口&#xff0c;在登录时忘记修改登录的网址。 因为80端口被占用&#xff0c;于是我修改了phpstudy的端口为8080&#xff0c;在上传成功后&#xff0c;使用手机输入电脑的Ip地址死活打…

3结构介绍_豹驰(BOACH)声学材料吸隔声方法介绍—(下)材料隔声特性曲线

基于前两个章节(《豹驰声学材料吸/隔测试方法基础介绍—(上)》&《豹驰声学材料吸/隔声测试方法介绍—(中)》的声学材料吸隔声测试方法介绍&#xff0c;可以了解材料的检测手段及如何有效的采用测试获取数字化模型搭建的输入&#xff0c;支持吸隔声材料制品的设计开发&#…

jQuery基本语法

一、jQuery基础1.为什么要用jquery&#xff1f; 写起来简单&#xff0c;省事&#xff0c;开发效率高&#xff0c;兼容性好2、什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库&#xff08;类似python里面的模块&#xff09;3、如何使用jQuery&#xff1f; 1、导…

1-1圆柱体的表面积(算法竞赛入门经典)

源码: #include<iostream> #include<bits/stdc.h> using namespace std; int main() {double r,h;const double piacos(-1.0);double s,s1,s2;cin>>r>>h;s12*pi*r*r;s22*pi*r*h;ss1s2;printf("Area%.3f\n",s);return 0; }收获: 1.const定义…

如何去掉文章里的非关键词c++_B2B/B2C网站:文章标题如何写才能促进搜索排名...

为网站增加高质量内容目的之一是网站在搜索引擎上获得良好曝光机会。创作内容时首先引起我们困惑的是&#xff1a;“这篇文章的标题如何写才能更好&#xff1f;”的确&#xff0c;一个好的文章标题对排名的帮助巨大。尽管没有数据来说明一个好标题对排名的影响程度。但随着时间…

基于DBUtils实现数据库连接池

小知识&#xff1a; 1、子类继承父类的三种方式 class Dog(Animal): #子类 派生类def __init__(self,name,breed, life_value,aggr):# Animal.__init__(self,name,breed, life_value,aggr)#让子类执行父类的方法 就是父类名.方法名&#xff08;参数&#xff09;&#xff0c;连…

1-2 三位数反转(算法竞赛入门经典)

简单的三位数反转代码如下: #include<iostream> #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;cout<<n%10<<n/10%10<<n/100<<endl;return 0; }但是这里需要考虑一下的细节是题目中是否明确对个位为零的情…

vue中refs的使用

最近在看其他项目的过程中,发现在dom节点上使用了ref"xxx"的使用,以前一直不知道该属性起着什么作用,因为一直忙着写项目. 这两天项目不忙了,有闲心来看别人做的项目了,就看到这个用法了,还是直接百度,有很多解释,大致的意思就是给dom节点绑定一个值value,将这个valu…

python自动保存图片_Python学习笔记:利用爬虫自动保存图片

兴趣才是第一生产驱动力。Part 1起先&#xff0c;源于对某些网站图片浏览只能一张一张的翻页&#xff0c;心生不满。某夜&#xff0c;冒出一个想法&#xff0c;为什么我不能利用爬虫技术把想看的图片给爬下来&#xff0c;然后在本地看个够。由此经过一番初尝试发现&#xff0c;…

1-3 交换变量(算法竞赛入门经典)

交换变量在这里提出了三种方法&#xff0c;代码如下&#xff1a; 我这里直接设计了三个函数用以验证: #include<iostream> #include<bits/stdc.h> using namespace std;void swap1(int a,int b); void swap2(int a,int b); void swap3(int a,int b);int main() {i…

145. Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes values. For example:Given binary tree [1,null,2,3], 1\2/3思路&#xff1a; 借助于一个栈&#xff0c;依次将根节点的右子节点和左子节点压入栈中。如果一个节点为叶子节点&#xff0c;或者前一个出栈的元…

python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算

pandas提供了一个灵活高效的groupby功能&#xff0c;它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计&#xff0c;如计数、平均值、标准差&#xff0c;或用户自定义函数。对…

计算机网络原理关于实验中几个指令使用的复习——网络层

1.>&#xff1a;普通用户模式。 2.en(enable):特权用户模式 3.conf t&#xff08;configure terminal):进入全局配置模式 4.interface fa0/0:接口配置模式 5.exit:退出返回到上一层。 1.ip route:显示所有路由 2.全局配置模式下: ip route 目的网络 掩码 下一跳的IP 3. arp…

46-单元测试(1)

单元测试&#xff1a;对一个函数&#xff0c;类&#xff0c;模块进行测试&#xff1a;TDD(测试驱动开发) #在同一个目录下建两个py文件&#xff1a;mydict.py和Testmydict.py#mydict.py class Dict(dict):def __init__(self, **kw):super().__init__(**kw)def __getattr__(self…

1-4 鸡兔同笼(算法竞赛经典入门)

这个属于初级阶段传递给初学者的一个思想&#xff0c;那就是计算机是不可以计算方程式的&#xff0c;需要你具体的告诉它每一步需要做什么。 源码如下: #include<iostream> #include<bits/stdc.h> using namespace std; int main() {int m,n;double x,y;cin>&…

计算机网络各层协议

应用层(典型设备:应用程序, 如FTP, SMTP , HTTP) HTTP (Hypertext Transfer Protocol )超文本传输协议 <端口号 80>, 面向事务的应用层协议。 DNS (Domain Name System )域名解析<端口号53> FTP (File Transfer Protocol )文件传输协议<端口号21>减少或消除不…