我的方法:把所有在序列里为 1 的点计算出来,存入set
。输入时再循环访问set
,看看是否为 1。再输出。时间复杂度 O(nlogn)。
此题给的数据:N≤1500000 ai≤109。
我计算了一下:
log2109≈30
15×105×30=45000000≈0.5×107
按理说能过,我也开了 o2,但为啥还是T呢,求大佬指教。
最后附上代码:
#include <iostream>
#include <set>
using namespace std;
typedef long long l;
l arr[45005];
int main(){
l xb=1;
set<l>he;
while(arr[xb-1] <= 1000000000){
arr[xb]=arr[xb-1]+xb;
he.insert(arr[xb-1]);
xb++;
}
l k;
cin>>k;
for(l i=0;i<k;i++){
l m;
cin>>m;
if(he.count(m-1)==1){
cout<<1<<endl;
}else{
cout<<0<<endl;
}
}
return 0;
}