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

线段树什么的最讨厌了相关推荐

  1. 2019.1.21【NOIP提高组】模拟B组 JZOJ 4208 线段树什么的最讨厌了

    DescribeDescribeDescribe 给定buildtreebuildtreebuildtree函数 void buildtree(int k,int l,int r) {if(l==r) ...

  2. jzoj(senior)4208. 【五校联考1day1】线段树什么的最讨厌了

    题目链接 题解:反着搜,从[l,r]区间去拓展到其他四个区间[l,2r-l],l,2r-l+1,[2l-r-2,r]2l-r-1,r,然后dfs这四个区间就好啦! #include<cmath& ...

  3. HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)

    题目链接:点击查看 题目大意:给出一个由n个点和n条边组成的图,每条边都有权值,题目保证图是连通的,然后给出m个询问,每次询问分为两种形式: 0 x y:将第x条边的权值修改为y 1 x y:查询x- ...

  4. [NOI2018] 归程(线段树维护并查集的可持久化/kruskal重构树,倍增+dijkstra最短路)

    [NOI2018] 归程 description solution1 code1 solution2 code description 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要 ...

  5. [线段树][树上差分] Jzoj P3397 雨天的尾巴

    Description 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连 ...

  6. 吊打线段树的超级树状数组

    你是否讨厌线段树那冗长的代码?你是否还在因为线段树的难调试而满头♂dark汗?那么,请不要错过!超级树状数组特价!只要998,只要998! ##¥--#--¥%--&%¥--ER#%$#$#^ ...

  7. 【BZOJ4370】【IOI2015】horses 数据结构 平衡树+线段树

    4370: [IOI2015]horses马 Time Limit: 30 Sec Memory Limit: 1500 MB Description 像他的祖先一样,Mansur喜欢繁殖马匹.目前, ...

  8. [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  9. jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

最新文章

  1. 华为交换机导入配置_华为交换机基础配置1—进入命令行
  2. 古董来了:1999年的物件,香港已经回归了,我都上初中了,那么你出生了吗?
  3. Angular 9 新功能摘要
  4. springboot日志按照天自动输出_SpringBoot使用logback实现日志按天滚动-阿里云开发者社区...
  5. 猫狗动物声音模拟器微信小程序源码
  6. Audition生成扫频信号(四十)
  7. 数据库锁机制和CAS概念
  8. win10输入法转win7模式
  9. 打开资源管理器显示该文件没有与之关联的程序来执行该操作......
  10. 「雕爷学编程」Arduino动手做(23)——矩形脉冲发生器
  11. linux中可以使用以下命令查看文件内容,在Linux服务器中使用命令行中查看文件内容...
  12. 浅谈NAT(网络地址转换)原理 + 个人的思考
  13. element ui路由配置文件_element-ui使用导航栏跳转路由的用法详解
  14. js手动触发这个 onchange 事件
  15. 高性能网站 首屏渲染速度
  16. 安装openssh-server报Depends: openssh-client (= 1:6.6p1-2ubuntu2.8)错误
  17. window上完全卸载oracle
  18. win10设置虚拟内存_Win10安装后必做的优化,解决电脑卡顿问题,实用收藏系列...
  19. excel小写转大写公式_EXCEL中文小写数字怎么转化成阿拉伯数字呢?
  20. S5PV210 按键驱动源码、应用程序解析(重点:中断、休眠唤醒、定时器)

热门文章

  1. 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)
  2. acer switch 10 linux,【AcerSwitch10评测】高颜值的2in1电脑 Acer Switch 10评测_Acer Switch 10_笔记本评测-中关村在线...
  3. HashMap底层实现和原理
  4. MatConvnet工具箱文档翻译理解(1)
  5. PowerDesigner显示注释字段问题
  6. GPS服务端解析程序编写日记之--vs2010中多种语言开发及调试的若干注意事项
  7. 从使用角度看何为zookeeper
  8. 如何用Python画画
  9. C语言中的匿名结构体
  10. 【快乐水题】594. 最长和谐子序列