博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷P5156】【USACO18DEC】—Sort It Out(Lis计数dp+贪心)
阅读量:4954 次
发布时间:2019-06-12

本文共 947 字,大约阅读时间需要 3 分钟。

可以发现对于一个集合内的数无论怎么操作

都只会改变这些数的相对位置,而补集没有一点变化

所以我们要求所有非集合的数必须是单调递增的(否则无论怎么操作都不能满足有序)

则集合内的数要单调递减

则我们要求的是字典序第kkk小的最长下降子序列

对偶转换就变成了求字典序第kkk大的最长上升子序列

我们考虑倒序处理,对于每一个长度,维护一下哪些开头的lislislis长度为iii,有多少个()

然后每次贪心取一下就是了

代码:

#include
using namespace std;#define int long longinline int read(){
char ch=getchar(); int res=0,f=1; while(!isdigit(ch))ch=getchar(); while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar(); return res;}const int N=100005;int n,k,a[N],b[N],c[N],vis[N];const int inf=1e18;struct zxyakioi{
int maxn,cnt; inline friend void operator +=(zxyakioi &a,zxyakioi &b){
if(a.maxn
vec[N];signed main(){
n=read(); k=read(); for(int i=1;i<=n;i++)a[i]=read(),b[a[i]]=i; for(int i=n;i;i--){
zxyakioi now=query(b[i]+1); now.maxn++,vec[now.maxn].push_back(i); c[i]=now.cnt;update(b[i],now); } int m=query(1).maxn; int now=-1; for(int i=m;i;i--){
for(int j=0;j

转载于:https://www.cnblogs.com/stargazer-cyk/p/10366319.html

你可能感兴趣的文章
HDU6198 number number number
查看>>
HDU6438 Buy and Resell
查看>>
HDU6446 Tree and Permutation
查看>>
HDU6201 transaction transaction transaction
查看>>
HDU6203 ping ping ping
查看>>
前端小笔记
查看>>
《人人都是产品经理》书籍目录
查看>>
Netsharp系列文章目录结构
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
初学差分约束
查看>>
HEVC编码学习(一)HM配置
查看>>
通过Spark SQL关联查询两个HDFS上的文件操作
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
python-实现生产者消费者模型
查看>>
APP网络优化篇
查看>>
算法18-----判断是否存在符合条件的元素【list】
查看>>