这题就是让你求字典序第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. 快速搭建Wordpress

    1. 下载:ZentaoPMS作为Mysql Apach Php的基础环境: 2. 下载:Wordpress安装包: 3. 将Wordpress解压,放置于ZentaoPMS的Xampp的htdocs ...

  2. ECS 游戏架构 实现

    转载自:http://blog.csdn.net/i_dovelemon/article/details/27230719 实现 组件-实体-系统 - 博客频道   这篇文章是在我前面文章,理解组件- ...

  3. java简单例子介绍IOC和AOP

    IOC和AOP的一些基本概念 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内 ...

  4. IBatis模糊查询

    IBatis模糊查询  补充: mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * ...

  5. java 中toString()方法详解

    1.toString()方法 Object类具有一个toString()方法,你创建的每个类都会继承该方法.它返回对象的一个String表示,并且对于调试非常有帮助.然而对于默认的toString() ...

  6. 【转】彻底理解ThreadLocal

    ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...

  7. git的使用和一些命令

    1. https://github.com/ 在这个网站注册一个帐号. http://gitref.org/zh/creating/ 待会写.. [命令] a)

  8. 理解Javascript的Prototype

    在Javascript中创建对象主要分为三种方式 1. var catA = {name: "Fluffy", color: "White", age: 0}; ...

  9. ExtractStrings字符串截取

    //分割字符串 ExtractStrings var   s: String;   List: TStringList; begin   s := 'about: #delphi; #pascal, ...

  10. Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析

    Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...