任意给定一个区间,求包含此区间的线段数的最小根节点N,不存在输出-1
注意各种剪枝
# include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;
const long long INF=1e18;
long long ans;
void dfs (long long l,long long r)
{
// printf("%d %d\n",l,r);
if(r>=ans) return ;
if(l<0) return ;
if(l==0)
{
ans=r;
return ;
}
if(r-l+1>l) 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 ()
{
long long r,l;
while(scanf("%I64d%I64d",&l,&r)!=EOF)
{
ans=INF;
dfs(l,r);
if(ans==INF) printf("-1\n");
else printf("%I64d\n",ans);
}
return 0;
}