题意:给你一个区间【L,R】如果他是一棵线段树的某一节点,那么求满足输入区间的最小整数n,没有的话输出-1
思路:四种情况,直接爆搜即可考虑给定区间分别为左子树结点,右子树结点,一共四种情况。在加上可行性的剪枝即可。
<span style="font-size:14px;color:#000000;">#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
const LL INF=(LL)1e18;
LL n;
void dfs(LL l,LL r)
{
if(l<0||l > r||r>=n) return;
if(l==0)
{
n=r;
return;
}
if (l < r - l + 1) return ;
dfs(2*l- r - 1, r);
dfs(2*l- r - 2, r);
dfs(l, 2*r - l);
dfs(l, 2*r - l + 1);
}
int main()
{
int L,R;
while(cin>>L>>R)
{
n=INF;
dfs(L,R);
if(n==INF) cout<<-1<<endl;
else cout<<n<<endl;
}
return 0;
}</span>