令$f(n,b,m)=a[1..n]$(这里下标从1开始),考虑一些性质:
性质1.对于$\forall 1\le i\le n-m+1$,若$\exists 1\le j<i,a[j]>a[i]$,那么有$b[i+m-1]=a[i]$,证明略
根据性质1,可以去除掉所有满足条件的$i$,那么$a$就满足单调上升
性质2.对于$\forall 1\le i\le n$,都有$a[i]=f(j,b,j)[i]$,其中$j=\min(i+m-1,n)$(归纳法即可证)
根据性质2,容易发现$a_{i}$合法当且仅当其填在$b[1..j]$中,即$b$的方案数为$\prod_{i=1}^{n}\min(m,n-i+1)$
找到1个最大的$x$满足$\prod_{i=x}^{n}\min(m,n-i+1)\ge k$,那么$\forall 1\le i<x$,直接将$a_{i}$填在b中最小的未被填过的位置即可,而由于$m\ge 2$,所以有$n-x\ge \log_{2}k$,即仅需要考虑后$\lceil \log_{2}k \rceil+1$个位置,那么不断枚举当前位置上的数并判断:1.剩余方案数是否不小于k;2.这个位置上的数是否有限制(即填完后要保证$a[i-m+1]$的已填过了)
考虑时间复杂度,由于是多组数据,那么复杂度为$o(n\log_{2}^{\ 2}k)$,可以通过优化降为$o(n\log_{2}k)$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 800005
4 int t,n,m,x,a[N],b[N],id[N],vis[N],ans[N];
5 long long k;
6 int main(){
7 scanf("%d",&t);
8 while (t--){
9 scanf("%d%d%lld",&n,&m,&k);
10 int s=0,nn=0;
11 for(int i=1;i<=n;i++)ans[i]=0;
12 for(int i=1,j=1;i<=n;i++){
13 scanf("%d",&x);
14 if (s>x)ans[i+m-1]=x;
15 else{
16 s=a[++nn]=x;
17 while (ans[j])j++;
18 id[nn]=j++;
19 }
20 }
21 int las=nn;
22 long long sum=1;
23 while (sum<k){
24 las--;
25 sum*=min(nn-las+1,m);
26 }
27 for(int i=1;i<las;i++)ans[id[i]]=a[i];
28 for(int i=las;i<=nn;i++){
29 vis[i]=0;
30 b[i]=min(nn-i+1,m);
31 }
32 for(int i=las;i<=nn;i++)
33 for(int j=las;j<=nn;j++)
34 if (!vis[j]){
35 sum=sum/(b[j]--);
36 if (k<=sum){
37 vis[j]=1;
38 ans[id[i]]=a[j];
39 break;
40 }
41 k-=sum;
42 sum*=b[j];
43 }
44 for(int i=1;i<=n;i++)printf("%d ",ans[i]);
45 printf("\n");
46 }
47 }

[nowcoder5668I]Sorting the Array的更多相关文章

  1. Leetcode: Matchsticks to Square && Grammar: reverse an primative array

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  2. Scala入门之Array

    /** * 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: * 1,数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,也有很多情况使用Kaf ...

  3. Majority Element in an Array

    Problem Statement Given a large array of non-negative integer numbers, write a function which determ ...

  4. PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($this, "cmp")))

    PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($ ...

  5. CSharpGL(36)通用的非托管数组排序方法

    CSharpGL(36)通用的非托管数组排序方法 如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray< ...

  6. Thinking in Java——笔记(16)

    Arrays Why arrays are special There are three issues that distinguish arrays from other types of con ...

  7. 小白科普之JavaScript的数组

    一.与其他语言数据的比较    相同点:有序列表    不同点:js的数组的每一项可以保存任何类型的数据:数组的大小是可以动态调整的 二.数组创建的两种方法 1)  var colors = new ...

  8. javaapi中的排序

    有的时候需要对数组里的element进行排序.当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用? Sorting an Arr ...

  9. Cheatsheet: 2013 09.01 ~ 09.09

    .NET Multi Threaded WebScraping in CSharpDotNetTech .NET Asynchronous Patterns An Overview of Projec ...

随机推荐

  1. 内网渗透DC-5靶场通关

    个人博客地址:点我 DC系列共9个靶场,本次来试玩一下一个 DC-5,只有一个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶 ...

  2. NX CAM 读取加工参数

    '取加工几何试图程序组 Function GetGemoGroup_Name(ByVal camObjectTag As NXOpen.Tag) As String Dim theGemoGroupT ...

  3. Visual Studio 安装 C++

    Visual Studio 安装 C++

  4. FastAPI 学习之路(五十四)startup 和 shutdown

    我们在实际的开发中呢,总会遇到这样的场景,我们想在启动或者终止的时候,做一些事情,那么应该如何实现呢,其实也是很简单.fastapi提供了这样的操作. 那么我们看下具体是怎么实现的呢 app = Fa ...

  5. Scrum Meeting 16

    第16次例会报告 日期:2021年06月11日 会议主要内容概述: 最后一次例会 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公开性: 组员 负责 ...

  6. [技术博客]在团队中使用Pull Request来管理代码

    在团队中使用Pull Request来管理代码 前言 在参加多人共同开发项目,且选用Git作为代码托管工具的时候,我们不免会遇到分支冲突.覆盖.合并等问题.显然,因为同一个仓库是属于大家的,所以每个人 ...

  7. Linux下Zabbix5.0 LTS监控基础原理及安装部署(图文教程)

    Zabbix 是什么? zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.通过 C/S 模式采集数据,通过 B/S 模式在 Web 端展示和配置,能监视 ...

  8. [LGP2758]编辑距离

    目录 题目 题目描述 输入格式 输出格式 输入输出样例 题目分析 状态转移方程 初始状态 结束状态 Code 题目 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B ...

  9. 常用JAVA API :HashSet 和 TreeSet

    set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E e)//如果容器中不包含此元素,则添加. clear()//清空 contain ...

  10. 攻防世界 杂项13.can_has_stdio?

    打开发现是由trainfuck编码组成的小星星阵容,果断交给解密网站进行解密, 解密网站:http://ctf.ssleye.com/brain.html flag:flag{esolangs_for ...