题目描述
有一个无穷序列如下:
110100100010000100000 \texttt{110100100010000100000} 110100100010000100000…
请你找出这个无穷序列中指定位置上的数字。
输入格式
第一行一个正整数 N N N ,表示询问次数;
接下来的 N N N 行每行一个正整数 A i A_i Ai, A i A_i Ai 表示在序列中的位置。
输出格式
输出为 N N N 行,每行为 0 0 0 或 1 1 1 ,表示序列第 A i A_i Ai 位上的数字。
样例 #1
样例输入 #1
4
3
14
7
6
样例输出 #1
0
0
1
0
提示
对于 100 % 100\% 100% 的数据, N ≤ 1 500 000 N \leq 1\,500\,000 N≤1500000, A i ≤ 1 0 9 A_i≤10^9 Ai≤109。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 1e18
const int mod=1e9+7;
const int N=2e5+5;
int n,m;
int a[N];
void solve(){
cin>>n;
int t=0,cnt=0;
while(t<=1e9){
t+=++cnt;
a[cnt]=t;
}
while(n--){
int x;
cin>>x;
int l=1,r=cnt;
while(l<r){
int mid=l+r+1>>1;
if(a[mid]<=x) l=mid;
else r=mid-1;
}
x-=a[l];
if(x==1) cout<<1<<endl;
else cout<<0<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int tt=1;
// cin>>tt;
while(tt--) solve();
return 0;
}