多校联测11 8ady

题目大意

有一个排列 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,,an,我们现在进行如下操作:

for(int i=1;i<=n-m+1;i++) sort(a+i,a+i+m);

设最后的结果为 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots,b_n b1,b2,,bn,求满足条件的 a a a中字典序第 k k k小的 a a a

1 ≤ n ≤ 1 0 6 , m ≤ n , 1 ≤ k ≤ 1 0 18 1\leq n\leq 10^6,m\leq n,1\leq k\leq 10^{18} 1n106,mn,1k1018 b i b_i bi 1 1 1 n n n的一个排列。


题解

由题意可得 b i b_i bi a 1 , a 2 , … , a min ⁡ ( i + m − 1 , n ) a_1,a_2,\dots,a_{\min(i+m-1,n)} a1,a2,,amin(i+m1,n)中,满足不在 b 1 , b 2 , … , b i − 1 b_1,b_2,\dots,b_{i-1} b1,b2,,bi1中的最小的数。

那么,当 b i − 1 > b i b_{i-1}>b_i bi1>bi,就一定有 a i + m − 1 = b i a_{i+m-1}=b_i ai+m1=bi

把这些已经确定的 b i b_i bi去掉,剩下的问题等价于 n n n变小, m , k m,k m,k不变, b i = i b_i=i bi=i的子问题。

下面,我们假设 b i = i b_i=i bi=i

考虑从小到大将每一个 i i i填入 a a a中,易得 i i i需要填在 [ 1 , min ⁡ ( i + m − 1 , n ) ] [1,\min(i+m-1,n)] [1,min(i+m1,n)]中任意没填过的位置,那么填 i i i的方案数为 min ⁡ ( m , n − i + 1 ) \min(m,n-i+1) min(m,ni+1)

然而,因为方案数很大,而 k k k相对没那么大,所以 a a a有一个前缀都满足 a i = i a_i=i ai=i

f i f_i fi表示满足上面条件的前缀为 n − i n-i ni,也就是后面有最多 i i i个数不满足,那么

f i = f i − 1 × min ⁡ ( m , i ) f_i=f_{i-1}\times \min(m,i) fi=fi1×min(m,i)

m = 1 m=1 m=1时,显然只有一个答案。因为保证有解,这种情况下 k = 1 k=1 k=1

m > 1 m>1 m>1时, f i ≥ 2 i − 1 f_i\geq 2^{i-1} fi2i1,可得 f 62 ≥ k f_{62}\geq k f62k

那么,我们只需取最后 min ⁡ ( n , 62 ) \min(n,62) min(n,62)个位置,后面用一个状压维护状态,再枚举每一位填什么即可。细节见代码。

时间复杂度为 O ( n + v 3 ) O(n+v^3) O(n+v3),其中 v = min ⁡ ( n , 62 ) v=\min(n,62) v=min(n,62)

code

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],b[1000005],c[1000005],num[1000005],z[1000005];
long long k;
long long gt(int t,int w,long long now){long long re=1;for(int i=1;i<=t;i++){if((now>>i-1)&1){if(re>k/(min(i+m-1,t)-w)+1) return k+1;re=re*(min(i+m-1,t)-w);if(re>k) return k+1;++w;}}return re;
}
void dd(int l,int t){long long now=(1ll<<t)-1;for(int i=1;i<=l-t;i++) c[i]=num[i];for(int i=t;i>=1;i--){for(int j=1;j<=t;j++){if((now>>j-1)&1){long long vt=gt(t,t-i+1,now^(1ll<<j-1));if(k>=vt) k-=vt;else{c[l-i+1]=num[l-t+j];now^=(1ll<<j-1);break;}}}}
}
int main()
{scanf("%d%d%lld",&n,&m,&k);--k;for(int i=1;i<=n;i++){scanf("%d",&b[i]);}int lst=b[1],cnt=0;for(int i=2;i<=n;i++){if(lst>b[i]){a[i+m-1]=b[i];z[b[i]]=1;}else lst=b[i];}for(int i=1;i<=n;i++){if(!z[i]) num[++cnt]=i;}dd(cnt,min(cnt,62));int now=1;for(int i=1;i<=n;i++){if(!a[i]){a[i]=c[now];++now;}printf("%d ",a[i]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/98157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《从零开始学ARM》勘误

1. 50页 2 51页 3 236页 14.2.3 mkU-Boot 修改为&#xff1a; mkuboot 4 56页 修改为&#xff1a; 位[31&#xff1a;24]为条件标志位域&#xff0c;用f表示&#xff1b; 位[23&#xff1a;16]为状态位域&#xff0c;用s表示&#xff1b; 位[15&#xff1a;8]为扩展位域&…

HTML5+CSSday4综合案例二——banner效果

bannerCSS展示图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wi…

分布式数据库(林子雨慕课课程)

文章目录 4. 分布式数据库HBase4.1 HBase简介4.2 HBase数据模型4.3 HBase的实现原理4.4 HBase运行机制4.5 HBase的应用方案4.6 HBase安装和编程实战 4. 分布式数据库HBase 4.1 HBase简介 HBase是BigTable的开源实现 对于网页搜索主要分为两个阶段 1.建立整个网页索引&#xf…

Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)

1 SSH简介 SSH&#xff08;Secure Shell&#xff0c;安全外壳&#xff09;是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式&#xff0c;例如Telnet、FTP&#xff0c;使用明文传输数据&#xff0c;存在很多的安全…

数据结构 | (二) List

什么是 List 在集合框架中&#xff0c; List 是一个接口&#xff0c;继承自 Collection 。 Collection 也是一个接口 &#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable 也是一个接口&#xff0c;表示实现该接口的类是可以逐个…

分享几个通用个人简历模板|行业通用

Home(https://cvjury.com/) 专业设计的简历模板。 在竞争激烈的就业市场中脱颖而出的有效策略。 侧重于向招聘人员传达独特的价值主张。 帮助创建引人注目的简历、求职信和LinkedIn资料。 面向毕业生和学生的个性化简历解决方案。 添加图片注释&#xff0c;不超过 140 字&…

归并排序及其非递归实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示&#xff1a; 代码&#xff1a; 先分再归并&#xff0c;像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

MySQL——五、库表操作(上篇)

MySQL 表的基本操作一、创建表二、数据类型三、查看表四、删除表五、修改表的结构六、复制表的结构七、表的约束八、数据库字典九、存储引擎十、表物理存储结构 表的基本操作 一、创建表 数据表的每行称为一条记录&#xff08;record&#xff09;&#xff1b;每一列称为一个字…

PUPANVR-UI主菜单及设置窗体框架(9)

PUPA NVR UI主菜单及设置窗体框架 在设计UI时&#xff0c;竟量把数据、控制、显示&#xff0c;分开&#xff0c;即MVC的一个模式吧&#xff01;使用MVC这样的模式思想&#xff0c;会让代码简洁不少&#xff0c;逻辑也很清析&#xff01; 具体的代码见&#xff1a; PUPANVR这个…

第三次作业

自己实现扫描全盘的函数 def scan_disk(dir): global count,dir_count if os.path.isdir(dir): files os.listdir(dir) for file in files: print(file) dir_count 1 if os.path.isdir(dir os.sep file): …

等精度频率计verilog,quartus仿真视频,原理图,代码

名称&#xff1a;等精度频率计设计verilog quartus仿真 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; A&#xff1a;测量范围信号:方波 频率:100Hz~1MHz; B&#xff1a;测试误差:<0.1%(全量程) C&#xff1a;时钟频率:50kHz D&#xff1a;预闸…

php实战案例记录(19)对登录角色的权限进行判断

在 PHP 中&#xff0c;通过以下步骤对登录角色的权限进行判断&#xff1a; 确定登录用户的角色&#xff1a;首先&#xff0c;需要确保登录用户分配了一个角色。这可以通过检查用户登录凭据&#xff08;如用户名和密码&#xff09;来验证&#xff0c;并将用户与特定角色关联起来…

(2021|NIPS,VQ-VAE,精度瓶颈松弛,三明治层归一化,CapLoss)CogView:通过转换器掌握文本到图像的生成

CogView: Mastering Text-to-Image Generation via Transformers 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 0. 摘要 通用领域中的文本到图像生成长期以来一直是一个悬而未决的问题&#…

【算法与数据结构】--目录

第一部分&#xff1a;算法基础 第一章&#xff1a;算法入门第二章&#xff1a;数据结构概述第三章&#xff1a;算法设计与分析 3.1 贪心算法3.2 动态规划3.3 分治算法3.4 回溯算法 第二部分&#xff1a;常见数据结构 第四章&#xff1a;数组和链表 4.1 数组4.2 链表4.3 比较…

<HarmonyOS第一课>运行Hello World——闯关习题及答案

判断题 1.DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。&#xff08; 对 &#xff09; 2.main_pages.json存放页面page路径配置信息。&#xff08; 对 &#xff09; 单选题 1.在stage模型中&#xff0c;下列配置文件属于AppScope文件夹的是&#xff1f;&#xff…

十、pygame小游戏开发

目录 一、安装pygame二、pygame快速入门2.1 坐标系认识2.2 创建游戏主窗口2.3 实现图像绘制2.4 游戏循环和游戏时钟2.5 简单动画实现的实现2.6 监听事件2.7 精灵和精灵组三、游戏框架搭建3.1 实现飞机大战主游戏类3.2 完成游戏初始化部分3.3 使用常量代替固定的数值3.4 完成游戏…

vba智能办公

VBA是Visual Basic for Applications的缩写&#xff0c;是一种用于Microsoft Office应用程序的编程语言。它提供了许多方便的工具和功能&#xff0c;可以帮助我们自动化任务、增强数据处理和分析能力、提高工作效率等等。在这篇文章中&#xff0c;我们将探讨一些VBA的好处。 自…

2023年DDoS攻击发展趋势的分析和推断

DDoS是一种非常“古老”的网络攻击技术&#xff0c;随着近年来地缘政治冲突对数字经济格局的影响&#xff0c;DDoS攻击数量不断创下新高&#xff0c;其攻击的规模也越来越大。日前&#xff0c;安全网站Latest Hacking News根据DDoS攻击防护服务商Link11的统计数据&#xff0c;对…

Java代码hello word

一、安装java环境 开始学习java之前&#xff0c;我们的第一步就是安装java环境&#xff0c;即常说的JDK和JRE&#xff0c;此处就不在详细介绍配置环境过程&#xff0c;可以到网上搜索java开发环境配置。 二、编写第一个程序 工具&#xff1a; 常用的java编写工具有IDE、Notep…

LeetCode——动态规划(四)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 目录 322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 279. 完全平方数 - 力扣&#xff08;LeetCode&#xff09; 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff…