题目描述

若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M为N-伪
光滑数。现在给出N,求所有整数中,第K大的N-伪光滑数。
题解
题面的k意思是将这个数质因数分解后所有的质因子的指数和。
我们先把128以内的所有素数找出来,然后做一个dp
我们令dp[i][j]表示当前数的最大的质因子为p[i],当前所有素因子的指数和为j的数的集合。
我们再令g[i][j]表示当指数和位j时,所有最大质因子小于等于p[i]的数的集合。
然后我们可以合并集合。
f[i][j]=∑g[i-1][j-k]*p[i]k
g[i][j]=g[i-1][j]+f[i][j]
然后我们可以用函数式可并堆来维护所有的转移,在开一个全局的堆来维护所有的f。
然后一直弹堆顶就可以了。
注意pushdown
代码
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
typedef long long ll;
int tot,prime[],K,f[][],g[][];
ll n;
bool vis[];
inline ll rd(){
ll x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
struct node{
int i,j;ll val;
node(int ii=,int jj=,ll v=){i=ii;j=jj;val=v;}
inline bool operator <(const node &b)const{return val<b.val;}
};
priority_queue<node>q;
struct tree{
ll val,la;int l,r,d;
tree(ll xx=,ll yy=,int lx=,int rx=,int dd=){val=xx;la=yy;l=lx;r=rx;d=dd;}
}tr[];
inline int newnode(int x,ll y){
if(!x)return ;
int p=++tot;
tr[p]=tr[x];tr[p].val=tr[p].val*y;tr[p].la=tr[p].la*y;
return p;
}
inline void pushdown(int cnt){
if(tr[cnt].la!=){
tr[cnt].l=newnode(tr[cnt].l,tr[cnt].la);
tr[cnt].r=newnode(tr[cnt].r,tr[cnt].la);
tr[cnt].la=;
}
}
int merge(int x,int y){
if(!x||!y)return x|y;
if(tr[x].val<tr[y].val)swap(x,y);
pushdown(x);
int p=newnode(x,);
tr[p].r=merge(tr[p].r,y);
if(tr[tr[p].l].d<tr[tr[p].r].d)swap(tr[p].l,tr[p].r);
tr[p].d=tr[tr[p].r].d+;
return p;
}
inline void prework(){
int k;
for(int i=;i<=;++i){
if(!vis[i])prime[++prime[]]=i;
for(int j=;j<=prime[]&&(k=i*prime[j])<=;++j){
vis[i*prime[j]]=;
if(i%prime[j]==)break;
}
}
}
int main(){
cin>>n>>K;
prework();
f[][]=g[][]=tot=tr[].val=tr[].la=;
for(int i=;i<=prime[];++i){
f[i][]=g[i][]=;
for(ll pr=prime[i],j=;pr<=n&&pr>;++j,pr=pr*prime[i]){
f[i][j]=;
for(ll prm=prime[i],k=;k<=j;++k,prm=prm*prime[i]){
f[i][j]=merge(f[i][j],newnode(g[i-][j-k],prm));
}
g[i][j]=merge(g[i-][j],f[i][j]);
q.push(node(i,j,tr[f[i][j]].val));
}
}
ll ans=;
while(K--){
node x=q.top();q.pop();
ans=x.val;
pushdown(f[x.i][x.j]);
f[x.i][x.j]=merge(tr[f[x.i][x.j]].l,tr[f[x.i][x.j]].r);
q.push(node(x.i,x.j,tr[f[x.i][x.j]].val));
}
printf("%lld",ans);
return ;
}

[CQOI2016]伪光滑数的更多相关文章

  1. 【BZOJ4524】[Cqoi2016]伪光滑数 堆(模拟搜索)

    [BZOJ4524][Cqoi2016]伪光滑数 Description 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M ...

  2. @bzoj - 4524@ [Cqoi2016]伪光滑数

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  3. [bzoj4524] [loj#2047] [Cqoi2016] 伪光滑数

    Description 若一个大于 \(1\) 的整数 \(M\) 的质因数分解有 \(k\) 项,其最大的质因子为 \(Ak\) ,并且满足 \(Ak^K \leq N\) , \(Ak<12 ...

  4. Bzoj 4524 [Cqoi2016]伪光滑数(堆)

    题面 题解 先筛出$<128$的质数,很少,打个表即可 然后钦定一个质数最大,不断替换即可(丢进大根堆里面,然后取出一个,替换在丢进去即可) 具体来说,设一个四元组$[t,x,y,z]$表示当前 ...

  5. BZOJ4524 CQOI2016伪光滑数(堆)

    对于每个质数求出其作为最大质因子时最多能有几个质因子,开始时将这些ak1~akmaxk扔进堆.考虑构造方案,使得每次取出最大值后,最大质因子.质因子数均与其相同且恰好比它小的数都在堆里.类似暴搜,对于 ...

  6. BZOJ4524 [Cqoi2016]伪光滑数

    BZOJ上的题面很乱,这里有一个题面. 题解: 正解是可持久化可并堆+DP,可惜我不会... 但暴力也可过这道题. 先在不超过N的前提下,在大根堆里加入每个质数的J次方,1<=j, 然后就可以发 ...

  7. 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]

    4524: [Cqoi2016]伪光滑数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 183  Solved: 82[Submit][Status] ...

  8. 2021.08.01 P4359 伪光滑数(二叉堆)

    2021.08.01 P4359 伪光滑数(二叉堆) [P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 若一个大于 11 的整数 MM ...

  9. Loj 2047 伪光滑数

    Loj 2047 伪光滑数 正解较复杂,但这道题其实可以通过暴力解决. 预处理出 \(128\) 内的所有质数,把 \(n\) 内的 \(prime[i]^j\) 丢进堆中,再尝试对每个数变形,除一个 ...

随机推荐

  1. 由于服务主机:DCOM服务进程占用过多CPU,导致系统卡死

    最近在使用电脑的时候,总是出现电脑死机,而且鼠标也是经常卡在那里不动了,开始以为是鼠标的问题,还换了个鼠标(飙泪中),这还是一个血的教训啊!!!之后打开任务管理器发现CPU占用已经达到100%,而且一 ...

  2. 责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

    责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这 ...

  3. javascript 函数后面有多个小括号f( )( )( )...

    有时我们看见js函数后面跟着多个小括号是什么意思?f( )( )( )... f()执行f函数,返回子函数 f()()执行子函数,返回孙函数 f()()()执行孙函数,返回重孙函数 ... ... 但 ...

  4. SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是报错?

    SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是报错? 如下的PO 4400000069,处于HELD状态.ME22N试图保存它为一个正式的采购订单,报错说供应商没有在采购组织下维护, 使 ...

  5. 基于html5 plus + Mui 移动App开发(一)

    使用Html5 plus + Mui 进行移动App开发,有一段时间了,这几日得空,做个资讯App分享给大家. 今天主要分享主页实现,首先看下效果: 此界面主要分为:标题.内容分类列表.搜索及设置按钮 ...

  6. poi控制简单的word

    官方model网址:http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/e ...

  7. Android View的重绘过程之Layout

    博客首页:http://www.cnblogs.com/kezhuang/p/ View绘制的三部曲,测量,布局,绘画现在我们分析布局部分测量部分在上篇文章中已经分析过了.不了解的可以去我的博客里找一 ...

  8. 高通平台如何避免误入FFBM模式

    前面两篇博客分别介绍了通过fastboot和QFIL工具退出FFBM模式的方法.虽然售后的同学可以这么指导用户做恢复,但步骤多操作也麻烦,且属于事后处理,如果大面积高概率地出现,会严重影响用户体验.这 ...

  9. 【English】四、Y结尾名词变复数

    一.辅音字母+y结尾的名词,将y改变为i,再加-es. 读音变化:加读[z]. 例: candy→candies; daisy→daisies; fairy→fairies; lady→ladies; ...

  10. DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

    反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...