NC222904. 纯情活泼的拆分
描述
输入描述
第一行一个正整数 ,表示琪露诺找来的数的个数。
接下来一行, 个正整数 ,含义如题所示。
输出描述
共 行。其中,第 行输出 。
示例1
输入:
4 5 7 19 23
输出:
2 3 5 6
说明:
C++ 解法, 执行用时: 329ms, 内存消耗: 58040K, 提交时间: 2021-09-20 16:59:30
#include<bits/stdc++.h> #define N 2000005 #define ll long long #define mp make_pair #define fi first #define se second using namespace std; int T,tp;ll ans[N],val[N],t[N]; priority_queue<pair<ll,ll>>q; ll rd(){ char c;ll re=0; while(!isdigit(c=getchar())); while(isdigit(c))re=re*10ll+c-'0',c=getchar(); return re; } int main(){ q.push(mp(-2,2)),T=2,val[2]=1ll; while(!q.empty()){ ll v=-q.top().fi,x=q.top().se;q.pop(); tp++;ans[tp]=ans[tp-1]+v;t[x]++,val[x]*=x; if(ans[tp]>1e12)break; if(x<=1e18/val[x])q.push(mp(-val[x]*(x-1ll),x)); if(q.empty()||-q.top().fi>T)T++,q.push(mp(-T,T)),val[T]=1ll; } int TT=rd(); while(TT--){ ll x=rd(); cout<<upper_bound(ans+1,ans+tp+1,x)-ans-1<<'\n'; } return 0; }