E. Increasing Subsequences

原题链接

题解 太巧妙了

1.对于一个递增子序列个数为 sum ,元素值域为 [l,r] 的序列而言
在最右端插入一个

  • l1 ,对 sum 的影响是 +1
  • r+1 ,对 sum 的影响是 2

由于乘二加一可以在两百次操作内使 sum 能达到任意 X ,(gan jue)
然后空序列的 sum 是1,因此我们依靠倒推得出序列(我们从1e9开始,这样确保r/l是递减/递增,且数量足够)

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll x;
void solve()
{
    stack<ll> ans;
    ll l=-1e9,r=1e9;
    while(x>1)
    {
        if(x%2)
        {
            ans.push(l++);
            x--;
        }
        else
        {
            ans.push(r--);
            x>>=1;
        }
    }

    cout<<ans.size()<<endl;
    while(ans.size())
    {
        cout<<ans.top()<<" ";
        ans.pop();
    }
    cout<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    ll t;
    cin>>t;
    while(t--)
    {
        cin>>x;
        solve();
    }
    return 0;
}

posted @   纯粹的  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示