2017.9.4 斜堆 失败总结
2017-09-04 21:44
239 查看
这个题之前根本不知道斜堆是什么东西、
所以强行模拟找规律、、
然后发现这个旋转操作是可逆的,
就可以根据放入的操作直接推出取出最新放的点的操作
然后就不会了、、
%%点击打开链接
为什么总是碰上结论题、(虽然只是自己弱不会推结论)
上面的解释已经很好懂了,,因为每次操作都是在左子树、、所以只考虑左路径
那选点的时候必须注意,如果有点没有右子树了,那必须取他,除非左儿子为叶节点
不然删了下面的点,这个点的左儿子变成右儿子,在加入下面的这个点就不会在原来的链上了、
所以这么取,取完就好了、
码:
#include<iostream>
#include<cstdio>
using namespace std;
int rt,ch[100005][2],fu[100005],n,i,d[100005],ans[100005];
int zhao()
{
int o=rt;
int xz;
while(1)
{
if(ch[o][0]==0)
{
xz=o;
break;
}
if(ch[o][1]==0)
{
if(ch[ch[o][0]][0]==0)
{
xz=ch[o][0];
break;
}else
{
xz=o;
break;
}
}else
{
o=ch[o][0];
}
}
o=fu[xz];
if(xz==rt)rt=ch[xz][0];
ch[o][0]=ch[xz][0];
fu[ch[xz][0]]=o;
while(o!=0)
{
if(ch[o][1]!=0) swap(ch[o][0],ch[o][1]);
o=fu[o];
}
return xz;
}
int main()
{
scanf("%d",&n);n++;
rt=1;
for(i=1;i<n;i++)
{
scanf("%d",&d[i]);
if(d[i]>=100)d[i]-=100,ch[d[i]+1][1]=i+1;
else ch[d[i]+1][0]=i+1;
fu[i+1]=d[i]+1;
}
for(i=1;i<=n;i++)
{
ans[n-i+1]=zhao()-1;
}
for(i=1;i<=n;i++)
printf("%d ",ans[i]);
}
所以强行模拟找规律、、
然后发现这个旋转操作是可逆的,
就可以根据放入的操作直接推出取出最新放的点的操作
然后就不会了、、
%%点击打开链接
为什么总是碰上结论题、(虽然只是自己弱不会推结论)
上面的解释已经很好懂了,,因为每次操作都是在左子树、、所以只考虑左路径
那选点的时候必须注意,如果有点没有右子树了,那必须取他,除非左儿子为叶节点
不然删了下面的点,这个点的左儿子变成右儿子,在加入下面的这个点就不会在原来的链上了、
所以这么取,取完就好了、
码:
#include<iostream>
#include<cstdio>
using namespace std;
int rt,ch[100005][2],fu[100005],n,i,d[100005],ans[100005];
int zhao()
{
int o=rt;
int xz;
while(1)
{
if(ch[o][0]==0)
{
xz=o;
break;
}
if(ch[o][1]==0)
{
if(ch[ch[o][0]][0]==0)
{
xz=ch[o][0];
break;
}else
{
xz=o;
break;
}
}else
{
o=ch[o][0];
}
}
o=fu[xz];
if(xz==rt)rt=ch[xz][0];
ch[o][0]=ch[xz][0];
fu[ch[xz][0]]=o;
while(o!=0)
{
if(ch[o][1]!=0) swap(ch[o][0],ch[o][1]);
o=fu[o];
}
return xz;
}
int main()
{
scanf("%d",&n);n++;
rt=1;
for(i=1;i<n;i++)
{
scanf("%d",&d[i]);
if(d[i]>=100)d[i]-=100,ch[d[i]+1][1]=i+1;
else ch[d[i]+1][0]=i+1;
fu[i+1]=d[i]+1;
}
for(i=1;i<=n;i++)
{
ans[n-i+1]=zhao()-1;
}
for(i=1;i<=n;i++)
printf("%d ",ans[i]);
}
相关文章推荐
- 2017.9.4 黑白棋 失败总结
- 2017.9.4 栅栏 失败总结
- 只为成功找方法,不为失败找借口! javaweb学习总结(五)——Servlet开发(一)
- 项目失败的原因总结
- 从银行转账失败到分布式事务:总结与思考
- X-lite注册到自己搭建的freeSWITCH服务器失败总结
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 部署错误: 启动 Tomcat 失败。-- '127.0.0.1' 不是内部或外部命令,也不是可运行的程序
- 2017.8.10 树上染色 失败总结
- 高振啊!闲来无事多读读 考研失败总结
- 项目失败经验总结,感觉生活中也是如此,蛮有道理
- 2017.10.7 phi的反函数 失败总结
- 智能一代云平台(十一):Eclipse启动项目报启动上下文失败问题解决方案总结
- 2017.10.9 DZY Loves Math V 失败总结
- linux下免密认证登录失败原因总结
- 2017.9.12 人员雇佣 失败总结
- 第一次面试失败总结
- sql 2005 用户 sa 登录失败 情况总结
- 电子商务创业失败的总结
- 华为面试 失败总结
- 2017.10.15 旅行comf 失败总结