博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC日记——Broken BST codeforces 797d
阅读量:7059 次
发布时间:2019-06-28

本文共 1156 字,大约阅读时间需要 3 分钟。

 

思路:

  二叉搜索树;

  它时间很优是因为每次都能把区间缩减为原来的一半;

  所以,我们每次都缩减权值区间。

  然后判断dis[now]是否在区间中;

 

代码:

#include #include 
#include
#include
#include
using namespace std;#define maxn 100005#define INF 0x7fffffffint n,ch[maxn][2],dis[maxn],ans;int l[maxn],r[maxn],root;bool if_[maxn];map
ma;map
maa;inline void in(int &now){ int if_z=1;now=0; char Cget=getchar(); while(Cget>'9'||Cget<'0') { if(Cget=='-') if_z=-1; Cget=getchar(); } while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); } now*=if_z;}void dfs(int now,int l,int r){ if(l>r) return ; if(dis[now]>=l&&dis[now]<=r) { if(!maa[dis[now]]) { ans+=ma[dis[now]]; maa[dis[now]]=true; } } if(ch[now][0]!=-1) dfs(ch[now][0],l,min(dis[now]-1,r)); if(ch[now][1]!=-1) dfs(ch[now][1],max(l,dis[now]+1),r);}int main(){ in(n); for(int i=1;i<=n;i++) { in(dis[i]),in(ch[i][0]),in(ch[i][1]),ma[dis[i]]++; if(ch[i][0]!=-1) if_[ch[i][0]]=true; if(ch[i][1]!=-1) if_[ch[i][1]]=true; } for(int i=1;i<=n;i++) { if(!if_[i]) { root=i; break; } } dfs(root,0,INF); cout<

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6839656.html

你可能感兴趣的文章
glusterfs 步骤
查看>>
浅谈gibbs sampling(LDA实验)
查看>>
Asp.net 后台添加CSS、JS、Meta标签
查看>>
JDBC连接SQL Server2008基本格式及示例代码 (转载收藏~)
查看>>
以前的GHOST系统没落,现在 原版WINDOWS更新节奏还快 MSDN itellyou
查看>>
scala学习手记21 - 传递变长参数
查看>>
一些JavaScript中的DOM的优化小技巧
查看>>
用PrintStream向文件输入内容
查看>>
412. Fizz Buzz
查看>>
Uva 10879 - Code Refactoring
查看>>
控制总线上发送的控制信息
查看>>
c#解析xml
查看>>
每日一句(15)
查看>>
读书笔记--SQL必知必会--建立练习环境
查看>>
捕获、冒泡
查看>>
C# 递归获取 文件夹的 所有文件
查看>>
ubuntu server 安装java
查看>>
P3369 【模板】普通平衡树(Treap/SBT)
查看>>
陶哲轩实分析例8.4.2
查看>>
Elementary Methods in Number Theory Exercise 1.5.5
查看>>