【Henu ACM Round#17 E】Tree Construction
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
做这题之前先要知道二叉排序树的一个性质。
就是它的中序遍历的结果就是这个数组升序排序。
(且每个节点的左边的节点都是比这个节点的值小的,每个节点的右边的节点都是比这个节点的值大的。
则我们把原数组排序。
然后在这里面找到原来数组的a[1]的位置idx;
则1..idx-1这些数字都是a[1]的左子树。
idx+1..n这些数字都是a[1]的右子树。
然后idx的左儿子是什么呢?
肯定就是1..idx-1中在原数组中最早出现的数字。
(因为最早出现,且又比它小。
那么肯定就在根节点的左儿子上了。
那么idx的右儿子呢?
会发现也是idx+1..n中出现最早的数字.
(比它大,且又出现得最早.所以肯定是它的右儿子。
然后就会发现。这是一个递归的过程了。
每个儿子接下来都是这样的。
只需用线段树。维护所有区间内最早出现的数字即可(也即 下标最小的数字
【代码】
#include <bits/stdc++.h>
#define ll long long
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int N = 1e5;
int n,mi[N<<2];
struct abc{
int id,x;
bool operator < (const abc &b) const{
return x < b.x;
}
}a[N+10];
int tag[N+10],fa[N+10],b[N+10];
void build(int l = 1,int r = n,int rt = 1){
if (l==r){
mi[rt] = l;
return;
}
int mid = (l+r)>>1;
build(lson);
build(rson);
int lx = mi[rt<<1],rx = mi[rt<<1|1];
if (a[lx].id<a[rx].id){
mi[rt] = lx;
}else mi[rt] = rx;
}
int query(int L,int R,int l = 1,int r = n,int rt=1){
if (L<=l && r <= R){
return mi[rt];
}
int mid = (l+r)>>1;
int id =-1;
if (L<=mid){
id = query(L,R,lson);
}
if (mid<R){
int temp1 = query(L,R,rson);
if (id==-1) id = temp1;
else if (a[temp1].id<a[id].id) id = temp1;
}
return id;
}
void dfs(int l,int r,int f){
int idx = query(l,r);
fa[a[idx].id] = f;
if (idx<r) dfs(idx+1,r,a[idx].id);
if (l<idx) dfs(l,idx-1,a[idx].id);
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("rush.txt","r",stdin);
#endif // LOCAL_DEFINE
cin >> n;
for (int i = 1;i <= n;i++){
cin >> a[i].x;
a[i].id = i;
b[i] = a[i].x;
}
sort(a+1,a+1+n);
build();
dfs(1,n,0);
for (int i = 2;i <= n;i++)
cout << b[fa[i]]<<' ';
return 0;
}
【Henu ACM Round#17 E】Tree Construction的更多相关文章
- 【Henu ACM Round#17 F】Upgrading Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...
- 【Henu ACM Round#17 D】Hexagons!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 题目的图吓人. 找下规律就会发现从内到外是1,6,12,18 即1,16,26,36... 即1+6(1+2+3+...) 等差求和 ...
- 【Henu ACM Round#17 C】Kitahara Haruki's Gift
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 判断sum/2这个价值能不能得到就可以了. 则就是一个01背包模型了. 判断某个价值能否得到. f[j]表示价值j能否得到. f[0 ...
- 【Henu ACM Round#17 B】USB Flash Drives
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序,逆序.贪心选较大的就好. [代码] #include <bits/stdc++.h> #define ll lon ...
- 【Henu ACM Round#17 A】Simple Game
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是放在m-1或者m+1的. (m-1是左边的点都离a最近,而m+1则是右边的点都离他最近. 看看哪个更好就行 [代码] #inc ...
- 【Henu ACM Round#15 E】 A and B and Lecture Rooms
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最近公共祖先. (树上倍增 一开始统计出每个子树的节点个数_size[i] 如果x和y相同. 那么直接输出n. 否则求出x和y的最近 ...
- 【Henu ACM Round #13 E】Spy Syndrome 2
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 对m个串建立一棵字典树. 然后对主串. 尝试从第一个位置开始.在字典树中尝试匹配 如果匹配到了位置i 就再从位置i+1开始尝试匹配 ...
- 【Henu ACM Round#24 E】Connected Components
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 要求把连续的一段li..ri的边全都删掉. 然后求剩下的图的联通数 如果暴力的话 复杂度显然是O(k*m)级别的. 考虑我们把li. ...
- 【Henu ACM Round#24 D】Iterated Linear Function
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把B提取出来就是一个等比数列了. 求和一下会发现是这种形式. \(B*\frac{(A^n-1)}{A-1}+A^n*x\) 则求一 ...
随机推荐
- 13款用于拍摄全景照片的iOS应用
全景图是一种大画幅.用来展示尽量多的周围环境的照片,甚至能够展示一个球状的完整空间,让观赏者直接“站在”摄影师的位置,在照片里将该环境一览无余.全景照片能够以最直观的方式向人们展示和记录一个美丽风景的 ...
- ios 将随意对象存进数据库
要将一个对象存进数据库的blob字段,最好先转为NSData.一个对象要遵守NSCoding协议,实现协议中对应的方法,才干转成NSData. NSData *statusData = [NSKeye ...
- 面试题:Student s = new Student();在内存中做了哪些事情?即创建一个对象做了哪些事情
lStudent s = new Student();在内存中做了哪些事情? •载入Student.class文件进内存(方法区) •在栈内存为s开辟空间 •在堆内存为学生对象开辟空间 •对学生对象的 ...
- mysql-数据库维护
一.备份数据 1.使用mysqldump命令备份:前提:musql的版本必须一致. mysqldump -u username -p --default -character-set=gbk dbn ...
- Android面试精华
SIM卡的EF文件有什么作用? SIM卡里的全部文件按树来组织: 主文件MF(Master File)--主文件仅仅有文件头,里面存放着整个SIM卡的控制和管理信息 专用文件DF(Dedicated ...
- hdoj--2138--How many prime numbers(暴力模拟)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- Auto-Publishing and Monitoring APIs With Spring Boot--转
原文地址:https://dzone.com/articles/auto-publishing-amp-monitoring-apis-with-spring-bo If you are headin ...
- 运营商 WLAN
运营商 WLAN 运营商 WLAN 是 Android 9 中引入的一项功能,该功能可让设备自动连接到运营商实现的 WLAN 网络.在高度拥塞或信号覆盖范围较小的区域(如体育场或地铁站),运营商 WL ...
- java 基于 bootstrap_datagrid 分页
1.首先引入datagrid js ,css $("#datagrid").bootstrap_datagrid({ url : "<%=path%>/us ...
- 紫书 习题 10-8 UVa 10622(gcd)
把这个数质因数分解然后求因子个数的gcd就ok了. 一些细节 (1)这道题的质因数不需要存下来,每一次做完取一次gcd就ok了 (2)判断奇偶用ans & 1的时候要加括号, 位运算要注意括号 ...