BZOJ5484: [Usaco2018 Dec]Sort It Out
5484: [Usaco2018 Dec]Sort It Out
https://www.lydsy.com/JudgeOnline/problem.php?id=5484
Sol.
考虑没有在被喊叫集合中的点,他们一定是上升的。
那么最小的集合大小就是n-最长上升子序列长度。
对于第二问,有个转化:因为给出的是排列,求第k小的集合相当于求第k大的最长上升子序列。
那么可以记f[i]表示以i为头的最长上升子序列长度,g[i]表示方案数,转移时一起转移。
用个vector存最长上升子序列长度为i的开头有哪些,然后从大到小贪心取。
有个技巧:树状数组可以反着用!
我们要把1~x取Max,查询x~n的最小值。
那么可以
for(int i=x;i;i-=i&-i)tr[i]=max(tr[i],v)
for(int i=x;i<=n;i+=i&-ii) sum=max(tr[i],sum)
画个图看看似乎只有取Max可以用
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
#define maxn 100005
#define inf 1e18
using namespace std;
int n,f[maxn],a[maxn],tr[maxn],v,fl[maxn],cnt,p[maxn],ans[maxn];
ll g[maxn],k,way,w[maxn];
vector<int>G[maxn];
void Add(ll &x,ll y){
if(inf-y<x)x=inf;
else x+=y;
}
void ask(int i,int p){
for(;i<=n;i+=i&-i){
if(tr[i]>v)v=tr[i],way=w[i];
else if(tr[i]==v)Add(way,w[i]);
}
}
void add(int i){
for(;i;i-=i&-i){
if(v>tr[i])tr[i]=v,w[i]=way;
else if(v==tr[i])Add(w[i],way);
}
}
bool cmp(int a,int b){return a>b;}
int main(){
cin>>n>>k;
for(int i=;i<=n;i++)scanf("%d",&a[i]),p[a[i]]=i;
for(int i=n;i>=;i--){
v=,way=;
ask(a[i],);
v++;f[i]=v,g[i]=way;
if(f[i]==)g[i]=way=;
add(a[i]);
G[f[i]].push_back(a[i]);
}
for(int i=;i<=n;i++)sort(G[i].begin(),G[i].end(),cmp);
int Max=,mp=;
for(int i=n;i>=;i--){
for(int j=;j<G[i].size();j++){
if(G[i][j]<Max)continue;
int pl=p[G[i][j]];
if(pl<mp)continue;
if(g[pl]>=k){
fl[pl]=;Max=max(Max,G[i][j]);mp=max(mp,pl);
break;
}
k-=g[pl];
}
}
cnt=;
for(int i=;i<=n;i++)if(!fl[i])ans[++cnt]=a[i];
sort(ans+,ans+cnt+);
printf("%d\n",cnt);
for(int i=;i<=cnt;i++)printf("%d\n",ans[i]);
return ;
}
BZOJ5484: [Usaco2018 Dec]Sort It Out的更多相关文章
- BZOJ5487: [Usaco2018 Dec]Cowpatibility
Description 研究证明,有一个因素在两头奶牛能否作为朋友和谐共处这方面比其他任何因素都来得重要--她们是不是喜欢同 一种口味的冰激凌!Farmer John的N头奶牛(2≤N≤50,000) ...
- USACO2018 DEC (Gold) (dp,容斥+哈希,最短路)
\(T1\) 传送门 解题思路 傻逼\(dp\)..直接\(ST\)表处理最大值\(O(n^2)\)艹过了. 代码 #include<bits/stdc++.h> using namesp ...
- bzoj5483: [Usaco2018 Dec]Balance Beam
又又又又又又又被踩爆了 首先容易写出这样的期望方程:f(1)=max(d(1),f(2)/2),f(n)=max(d(n),f(n-1)/2), f(i)=max(d(i),(f(i-1)+f(i+1 ...
- [bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望
bzoj5483 Usaco2018Dec Balance Beam 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=5483 数据范围:略. 题解 ...
- USACO2018 DEC(Platinum) (树上乱搞,期望+凸包)
发现这跟\(Gold\)难度简直天差地别啊.. \(T1\) 传送门 解题思路 这道题还是很可做的,发现题意可以传化成一棵树每次从叶子节点删边,然后有\(m\)条限制,形如\(a\)在\(b\)前面删 ...
- [Usaco2018 Dec]Teamwork 题解
题目描述 题目描述 在Farmer John最喜欢的节日里,他想要给他的朋友们赠送一些礼物.由于他并不擅长包装礼物,他想要获得他的 奶牛们的帮助.你可能能够想到,奶牛们本身也不是很擅长包装礼物,而Fa ...
- sort排序命令常见用法
sort -n 按数字排序 [root@test88 ~]# cat test.txt 19036 6111 24039 3660 20610 10937 32408 20744 8248 28255 ...
- USACO比赛题泛刷
随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
随机推荐
- supermarket
题目链接 题意:给你n个商品,商品的利润和商品的过期时间,商品必须在过期时间内卖才能算利润,每天只能卖一件商品,问利润最大值. 思路:用并查集+贪心的思路,先给商品从大到小排序,然后选择过期时间的根节 ...
- [CSP-S模拟测试]:虎(DFS+贪心)
题目传送门(内部题15) 输入格式 第一行一个整数$n$,代表点数接下来$n-1$行,每行三个数$x,y,z$,代表点$i$与$x$之间有一条边,若$y$为$0$代表初始为白色,否则为黑色,若$z$为 ...
- CSS布局浮动和定位属性的区别
float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动;display: inline-block 有些时候可以替代float实现相同的效果. position: ...
- 嵌入式C语言3.5 关键字---运算符
1. 算数运算符 + - A +/- B 要求A,B数据类型一致 * 乘法 / 除法 %取模 乘法CPU可能需要多个周期,甚至需要利用软件的模拟方法来实 ...
- CommonJS规范 by ranyifeng
1,概述 CommonJS是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回 ...
- Lock的使用
Lock是一个Java类,synchronized是一个Java关键字,两者有本质的不同 Lock需要手动释放锁,synchronized是自动释放锁 Lock适合大量同步的代码同步,synchron ...
- spring cloud学习--feign
简单示例 增加feign maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> < ...
- ES6中的CLASS继承
ES6中的CLASS继承:https://www.jianshu.com/p/3d3d52b47762 es6 javascript的Class 类的继承:https://blog.csdn.net/ ...
- Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)
Windows平台下在Emacs中使用plantuml中文乱码问题(已解决) */--> code {color: #FF0000} pre.src {background-color: #00 ...
- opencv中图像的读取,显示与保存1
1.读入图像 用cv2.imread()函数来读取图像,cv2.imread(路径,图像颜色空间)(其中颜色空间默认为BGR彩图) cv2.IMREAD_COLOR:读入一副彩色图像 cv2. ...