无穷的序列(seq)
【问题描述】
有一个无穷序列如下:
110100100010000100000…
请你找出这个无穷序列中指定位置上的数字
【输入】
第一行一个正整数N,表示询问次数;
接下来的N行每行一个正整数Ai,Ai表示在序列中的位置。
【输出】
N行,每行为0或l,表示序列第Ai位上的数字。
【输入样例】
4
3
14
7
6
【输出样例】
0
0
1
0
【数据范围】
对于100%的数据有N≤1500000,Ai≤10^9
=========================
==================
{
ID:jie19952
PROG:
LANG:PASCAL
}
var
a:array[0..89443]of longint;
sum:array[0..89443]of longint;
n:longint;
procedure init;
begin
assign(input,'seq.in');
assign(output,'seq.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
function find(x:longint):boolean;
var
l,r,m:longint;
begin
find:=false;
l:=1; r:=89443;
while l<=r do
begin
m:=(l+r) shr 1;
if sum[m]>x then r:=m-1
else if sum[m]<x then l:=m+1
else exit(true);
end;
end;
procedure main;
var
i:longint;
x:longint;
begin
sum[0]:=1;
sum[1]:=2;
a[1]:=1;
a[0]:=0;
for i:=2 to 89443 do
begin
a[i]:=a[i-1]+1;
sum[i]:=sum[i-1]+a[i];
end;
readln(n);
for i:=1 to n do
begin
read(x);
if find(x) then writeln(1)
else writeln(0);
end;
end;
begin
init;
main;
terminate;
end.