Vs Brandy
背景
X年Y月Z日,工藤新一住所。
“铃......铃......”“您好,我是工藤新一,现在不在家,有事请留言。”
“工藤新一。哈哈......哈哈哈哈......”
阴冷的笑声盘旋在新一的房间里,许久才安静下来。
“组织已经发现了你,没想到吧......”
疯狂的声音慢慢低了下来,夹杂着一丝无奈和悲哀:
“组织已经决定从毛利兰下手了...我的代号是Brandy,看在Sherry的份上我告诉你这些。......以你现在的状况,是没法与组织对抗的。如果想拿到APTX4869的解药,就在明天正午给我来东京都米花町2丁目21番地,我在地下1层等你。”
“嘟——嘟——”一切重新归于安静。
描述
不可饶恕!柯南发现自己的家,也就是Vijos大楼,竟然为黑衣组织所占据!于是他按约来到了东京都米花町2丁目21番地vijos大楼地下1层,在那里,他看到了Brandy,也就是mike_nzk。mike_nzk拿着APTX4869解药的配方,眼神复杂地看着这个组织追杀了许久的少年。当然,APTX4869的解药不是白给的,mike_nzk有一道难题来考验江户川。
众所周知,线段树的建树过程是这样的递归过程:
procedure build(l,r,p:longint);
var m:longint;
begin
tree[p].l:=l;
tree[p].r:=r;
{其他初始化语句}
if l<r then begin
m:=(l+r) shr 1;
build(l,m,p*2);
build(m+1,r,p*2+1);
end;
end;
其中,线段树所在数组这样定义:
var tree:array[1..max] of record
l,r:longint;
{其他维护变量}
end;
主程序中这样调用:build(1,n,1);
(由于本人是学Pascal的,这边全是用Pascal写的,学C++的人多多包涵一下)
现在,mike_nzk要问柯南:给你一个n,求最小的max,使得线段树存在数组里不越界。
第一个问题:当n=7时,max=?
mike_nzk话音刚落,柯南就算出来max=13。
第二个问题:当n=10^1000时,max=?
这下柯南傻眼了:这么大!!!等到世界末日到来人类可能还造不出内存这么大的机器!!!
于是,柯南特地请教你(假设有一台内存足够的机器)。
格式
输入格式
只有一行,即n。
输出格式
只有一行,即最小的max。
样例1
样例输入1
7
样例输出1
13
限制
1s
提示
[题目提示]
太水了,我都懒得提示了!!!
[数据规模]
对于50%的数据,N<=10^7
对于100%的数据,1<=N<=10^1000
来源
mike_nzk,Brandy(白兰地)