这题就是让你求字典序第k小的最短乱序子序列

转换一下,其实就是字典序第k大的最长上升子序列

就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转移时贪心转移就行了

然而并不是很懂为什么计算\(f[i]\)时要倒着计算……

代码:

#include <bits/stdc++.h>
#define N 100005
#define ll long long
#define inf 1e18
using namespace std;

vector<int>v[N];
int a[N],b[N],n;
ll f[N];
bool use[N];
struct node{ int l;ll tot; }c[N];

node query(int x){
    node tmp={0,1};
    for(int i=x;i<=n;i+=(i&-i)){
        if(c[i].l>tmp.l) tmp.l=c[i].l,tmp.tot=c[i].tot;
        else if(c[i].l==tmp.l) tmp.tot=min((ll)inf,c[i].tot+tmp.tot);
    }tmp.l++;
    return tmp;
}
void add(node tmp,int x){
    for(int i=x;i;i-=(i&-i)){
        if(c[i].l<tmp.l) c[i].l=tmp.l,c[i].tot=tmp.tot;
        else if(c[i].l==tmp.l) c[i].tot=min((ll)inf,c[i].tot+tmp.tot);
    }
}

int main(){
    ll k;
    int mx=0,i,j,ans=0;
    scanf("%d%lld",&n,&k);
    for(i=1;i<=n;++i) scanf("%d",&a[i]),b[a[i]]=i;
    for(i=n;i>=1;--i){
        node x=query(b[i]+1);
        v[x.l].push_back(i),f[i]=x.tot;
        add(x,b[i]),mx=max(mx,x.l);
    }
    int val=0,pos=0;
    for(i=mx;i;--i){
        for(j=0;j<v[i].size();++j){
            int x=v[i][j];
            if(b[x]<val || x<pos) continue;
            if(f[x]<k) k-=f[x];
            else{ val=b[x],pos=x,use[x]=1;break; }
        }
    }
    printf("%d\n",n-mx);
    for(i=1;i<=n;++i) if(!use[i]) printf("%d\n",i);
}

洛谷P5156 [USACO18DEC]Sort It Out的更多相关文章

  1. 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)

    你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...

  2. p5156 [USACO18DEC]Sort It Out

    传送门 分析 我们发现对于没有发现的点相对位置不会发生改变 于是我们可以吧问题转化为求一个lis 于是我们字典序第k小的答案就是字典序第k大的lis 代码 #include<iostream&g ...

  3. 洛谷 SP9722 CODESPTB - Insertion Sort

    洛谷 SP9722 CODESPTB - Insertion Sort 洛谷传送门 题目描述 Insertion Sort is a classical sorting technique. One ...

  4. 洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions

    P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题 ...

  5. 洛谷 P1156 垃圾陷阱

    2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...

  6. 洛谷 P2279 03湖南 消防局的设立

    2016-05-30 16:18:17 题目链接: 洛谷 P2279 03湖南 消防局的设立 题目大意: 给定一棵树,选定一个节点的集合,使得所有点都与集合中的点的距离在2以内 解法1: 贪心 首先D ...

  7. 洛谷P1120 小木棍

    洛谷1120 小木棍 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50.     现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长 ...

  8. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

  9. 洛谷4月月赛R2

    洛谷4月月赛R2 打酱油... A.koishi的数学题  线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...

随机推荐

  1. mybaties association 只返回一个结果问题处理

    mybatis xml文件为: <resultMap id="BaseResultMap" type="com.test.SubscribeOrder"& ...

  2. Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  3. Red Hat 6.5 Samba服务器的搭建(登录访问)

    搭建Samba服务器是为了实现Linux共享目录之后,在Windows可以直接访问该共享目录. 现在介绍如何在红帽6.5系统中搭建Samba服务. 搭建Samba服务之前,yum源必须配置好,本地源和 ...

  4. Redis安装及HA(High Availability)配置(转)

    出处:http://www.cnblogs.com/morvenhuang/p/4184262.html Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的 ...

  5. css 字体上下居中显示 解决安卓手机line-height的偏差

      1.字体左右居中显示 text-align: center   <div class="font"> 上下居中 </div> .font{ width: ...

  6. CodeForces 681C Heap Operations (模拟题,优先队列)

    题意:给定 n 个按顺序的命令,但是可能有的命令不全,让你补全所有的命令,并且要求让总数最少. 析:没什么好说的,直接用优先队列模拟就行,insert,直接放入就行了,removeMin,就得判断一下 ...

  7. Android 类加载器

    首先需要知道的是android中两个主要的classloader,PathClassLoader和DexClassLoader,它们都继承自BaseDexClassLoader,这两个类有什么区别呢? ...

  8. nodejs版本升级

    网上都说   npm install –g n 可是一直不行,换做 npm install -g cnpm --registry=https://registry.npm.taobao.org ok

  9. maven中pom.xml中的scope讲解

    一.compile:编译范围compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. 二 ...

  10. 关于C#里面SQLite读取数据的操作

    做C#朋友的一个获取DataSet函数,对C#不熟,整理整理,了解怎么用 //挂载表格时候用 public static DataSet Query(string SQLString) { using ...