E. Increasing Subsequences__2

原题链接

题解

已知对于一个长度为 n 的连续+1型上升序列而言,其满足要求的子序列有2n

若我们在该序列下标为 k 的右边插入一个绝对大于左边,绝对小于右边的数,满足要求的子序列会增加 2k

由此想到极限构造加二进制,其中最高位的一不用管,其余的每一位生成上升序列,如果有一就在生成前插入
注意细节!!

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;
}

posted @   纯粹的  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示