题解
已知对于一个长度为 \(n\) 的连续+1型上升序列而言,其满足要求的子序列有\(2^n\)个
若我们在该序列下标为 \(k\) 的右边插入一个绝对大于左边,绝对小于右边的数,满足要求的子序列会增加 \(2^k\) 个
由此想到极限构造加二进制,其中最高位的一不用管,其余的每一位生成上升序列,如果有一就在生成前插入
注意细节!!
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
queue<ll> q;
int l=-1e9,r=1e9;
ll len=0;
while(n>1)
{
q.push(n%2);
len+=1+n%2;
n/=2;
}
cout<<len<<endl;
while(q.size())
{
if(q.front()==1) cout<<r--<<" ";
cout<<l++<< " ";
q.pop();
}
puts("");
}
return 0;
}
标签:__,int,ll,long,1e9,Subsequences,序列,Increasing
From: https://www.cnblogs.com/pure4knowledge/p/18071877