线段树什么的最讨厌了
Description
小Y 最近学习了线段树,但是由于她的智商比较低,运用的还不是很熟练。于是小R 给了她一点练习题训练,其中有一道是这样的。
这是小R 写的线段树的一段建树代码:
只要调用buildtree(1,0,n) 就可以得到一颗线段树了。显然,一颗线段树一共有O(n) 个节点,因为每一个节点都代表了一个不同的区间,所以线段树上一共出现了O(n) 个不同的区间。
现在小R 给了你一个区间[l; r],他想要你告诉他一个最小的n 使得区间[l; r] 出现在了用buildtree(1,0,n) 建出来的线段树中。
Input
第一行输入一个正整数T 表示数据组数。
接下来T 行每行三个整数L;R; lim 表示一组询问,如果对于所有的0 <= n <= lim 都不存在满足条件的解,输出-1 即可。
Output
对于每组询问输出一个答案。
Sample Input
2
0 5 10
6 7 10
Sample Output
5
7
Data Constraint
.
.
.
.
.
分析
我们可以从该区间逆向推它的父节点
以该区间为左子树或为右子树
共有四种情况:
q=y-x+1;
dfs(x-q,y);
dfs(x-q-1,y);
dfs(x,y+q-1);
dfs(x,y+q);
一定注意剪枝,没做好可能会直接爆蛋
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long l,r,lim;
long long minn;void dfs(long long x,long long y)
{if (y>lim) return;if (y>=minn) return;if (x==0){minn=y;return;}long long q=y-x+1;if (x-q==0||x-q>=q+q) dfs(x-q,y);if (x-q==1||x-q-1>=q+q+1) dfs(x-q-1,y);if (x>=q+q-1) dfs(x,y+q-1);if (x>q+q) dfs(x,y+q);
}int main()
{int t;scanf("%d",&t);while (t--){scanf("%lld%lld%lld",&l,&r,&lim);if (r>lim){printf("-1\n");continue;}if (l>r){printf("-1\n");continue;}minn=2147483647;dfs(l,r);if (minn!=2147483647){if (minn<=lim) printf("%lld\n",minn); else printf("-1\n");} else printf("-1\n");}return 0;
}
转载于:https://www.cnblogs.com/YYC-0304/p/10458953.html
线段树什么的最讨厌了相关推荐
- 2019.1.21【NOIP提高组】模拟B组 JZOJ 4208 线段树什么的最讨厌了
DescribeDescribeDescribe 给定buildtreebuildtreebuildtree函数 void buildtree(int k,int l,int r) {if(l==r) ...
- jzoj(senior)4208. 【五校联考1day1】线段树什么的最讨厌了
题目链接 题解:反着搜,从[l,r]区间去拓展到其他四个区间[l,2r-l],l,2r-l+1,[2l-r-2,r]2l-r-1,r,然后dfs这四个区间就好啦! #include<cmath& ...
- HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
题目链接:点击查看 题目大意:给出一个由n个点和n条边组成的图,每条边都有权值,题目保证图是连通的,然后给出m个询问,每次询问分为两种形式: 0 x y:将第x条边的权值修改为y 1 x y:查询x- ...
- [NOI2018] 归程(线段树维护并查集的可持久化/kruskal重构树,倍增+dijkstra最短路)
[NOI2018] 归程 description solution1 code1 solution2 code description 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要 ...
- [线段树][树上差分] Jzoj P3397 雨天的尾巴
Description 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连 ...
- 吊打线段树的超级树状数组
你是否讨厌线段树那冗长的代码?你是否还在因为线段树的难调试而满头♂dark汗?那么,请不要错过!超级树状数组特价!只要998,只要998! ##¥--#--¥%--&%¥--ER#%$#$#^ ...
- 【BZOJ4370】【IOI2015】horses 数据结构 平衡树+线段树
4370: [IOI2015]horses马 Time Limit: 30 Sec Memory Limit: 1500 MB Description 像他的祖先一样,Mansur喜欢繁殖马匹.目前, ...
- [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行
Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...
- jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图
Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...
最新文章
- 华为交换机导入配置_华为交换机基础配置1—进入命令行
- 古董来了:1999年的物件,香港已经回归了,我都上初中了,那么你出生了吗?
- Angular 9 新功能摘要
- springboot日志按照天自动输出_SpringBoot使用logback实现日志按天滚动-阿里云开发者社区...
- 猫狗动物声音模拟器微信小程序源码
- Audition生成扫频信号(四十)
- 数据库锁机制和CAS概念
- win10输入法转win7模式
- 打开资源管理器显示该文件没有与之关联的程序来执行该操作......
- 「雕爷学编程」Arduino动手做(23)——矩形脉冲发生器
- linux中可以使用以下命令查看文件内容,在Linux服务器中使用命令行中查看文件内容...
- 浅谈NAT(网络地址转换)原理 + 个人的思考
- element ui路由配置文件_element-ui使用导航栏跳转路由的用法详解
- js手动触发这个 onchange 事件
- 高性能网站 首屏渲染速度
- 安装openssh-server报Depends: openssh-client (= 1:6.6p1-2ubuntu2.8)错误
- window上完全卸载oracle
- win10设置虚拟内存_Win10安装后必做的优化,解决电脑卡顿问题,实用收藏系列...
- excel小写转大写公式_EXCEL中文小写数字怎么转化成阿拉伯数字呢?
- S5PV210 按键驱动源码、应用程序解析(重点:中断、休眠唤醒、定时器)
热门文章
- 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)
- acer switch 10 linux,【AcerSwitch10评测】高颜值的2in1电脑 Acer Switch 10评测_Acer Switch 10_笔记本评测-中关村在线...
- HashMap底层实现和原理
- MatConvnet工具箱文档翻译理解(1)
- PowerDesigner显示注释字段问题
- GPS服务端解析程序编写日记之--vs2010中多种语言开发及调试的若干注意事项
- 从使用角度看何为zookeeper
- 如何用Python画画
- C语言中的匿名结构体
- 【快乐水题】594. 最长和谐子序列