令$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. Markdown Reference

    Markdown For Typora Overview Markdown is created by Daring Fireball; the original guideline is here. ...

  2. iOS路由最佳选择是什么

    背景 记得四年前iOS路由开始盛行,当时比较有名的是蘑菇街的,后来CTMediator写了几篇文章把蘑菇街批的体无完肤,导致我后来写新项目用了CTMediator,那一堆组件创建的叫一个酸爽啊!再后来 ...

  3. 分库分表利器之Sharding Sphere(深度好文,看过的人都说好)

    Sharding-Sphere Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 S ...

  4. VS2019 及 Visual Assist X 安装配置

    Visual Studio 2019 安装 下载 https://visualstudio.microsoft.com/zh-hans/downloads/ 安装 设置 扩大 Solution Con ...

  5. 注解,@Qualifier+@Autowired 和 @Resource

    摘要: 项目中,对于AOP的使用,就是通过用注解来注入的. 更改之前的注解,是使用:@Qualifier+@Autowired   但是,通过这样注解,在项目启动阶段,需要自动扫描的过程是非常缓慢的, ...

  6. [技术博客] 利用SharedPreferences来实现登录状态的记忆功能

    [技术博客] 利用SharedPreferences来实现登录状态的记忆功能 一.SharedPreferences简介 SharedPreferences是Android平台上一个轻量级的存储辅助类 ...

  7. MIPI的走线阻抗

    MIPI的走线阻抗100欧的要求是根据LVDS(Low Voltage Differential Signaling)电平定义的. LVDS差分信号PN两线最大幅度是350mV,内部一个恒流源电流是3 ...

  8. 深入了解Mybatis架构设计

    架构设计 我们可以把Mybatis的功能架构分为三层: API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库.接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理. ...

  9. Tcpdump 常用命令、参数记录

    一.介绍 一个关于Centos  Tcpdump 的个人工作总结. 二.参数介绍: 1. -i:   指定要进行抓包的网卡 2.-s0 :表示每个报文的大小是接收到的指定大小,如果没有这个选项,则超过 ...

  10. 正则表达式之grep

    grep 的五个参数,基本的常用的: -a :将 binary 档案以 text 档案的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺 ...