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=1;i<=n;i++)scanf("%d",&a[i]),p[a[i]]=i; for(int i=n;i>=1;i--){ v=0,way=0; ask(a[i],1); v++;f[i]=v,g[i]=way; if(f[i]==1)g[i]=way=1; add(a[i]); G[f[i]].push_back(a[i]); } for(int i=1;i<=n;i++)sort(G[i].begin(),G[i].end(),cmp); int Max=0,mp=0; for(int i=n;i>=1;i--){ for(int j=0;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]=1;Max=max(Max,G[i][j]);mp=max(mp,pl); break; } k-=g[pl]; } } cnt=0; for(int i=1;i<=n;i++)if(!fl[i])ans[++cnt]=a[i]; sort(ans+1,ans+cnt+1); printf("%d\n",cnt); for(int i=1;i<=cnt;i++)printf("%d\n",ans[i]); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2018-11-07 无序字母对 character