CF1436E Complicated Computations 题解
Problem
给定一个长度为 的数组,求出它所有子数组 的 。
这里的 定义为一个数组中第一个没有出现的 正整数。
Solution
考场没有想出来,自闭了。
我们考虑是否存在一个子数组,满足其 ,首先,这个子数组里面必须要没有 ,
于是我们首先把数组中所有的 找出来,这些 把数组分成了若干段,我们要的子数组必须不能跨越这些段。
其次,对于这些段中,如果所有小于的数都在里面,那么这一段一定满足 (因为里面没有)。
可以结合一下图理解。
我们可以用线段树维护,具体细节见代码。
Code
const int MAXN = 1e5+10;
int val[MAXN<<2],lst[MAXN],a[MAXN],n;
bool able[MAXN];
//这个线段树维护的是每个数最后出现的位置
void update(int o,int l,int r,int pos,int v){
if(l == r) return (void)(val[o] = v);
int mid = l+r>>1;
if(pos <= mid) update(o<<1,l,mid,pos,v);
else update(o<<1|1,mid+1,r,pos,v);
val[o] = min(val[o<<1],val[o<<1|1]);
}//更新区间最小值
int query(int o,int l,int r,int xl,int xr){
if(l == xl && r == xr) return val[o];
int mid = l+r>>1;
if(xr <= mid) return query(o<<1,l,mid,xl,xr);
else if(xl > mid) return query(o<<1|1,mid+1,r,xl,xr);
else return min(query(o<<1,l,mid,xl,mid),query(o<<1|1,mid+1,r,mid+1,xr));
}//查询区间最小值
int main (){//lst[i] i 上一次出现的位置
scanf("%d",&n);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
for(int i = 1;i <= n;i++){
if(a[i] != 1) able[1] = 1;//注意对1的特判
if(a[i] > 1 && query(1,1,n,1,a[i]-1) > lst[a[i]]) able[a[i]] = 1;
//对段进行分割处理(lst[a[i]] ~ i) ,如果 1~a[i]-1 的数最后出现的位置都 > lst[a[i]] 且 < i(因为后面的还没更新,所以必定 < i) ,那么这一段满足MEX = a[i]
lst[a[i]] = i;
update(1,1,n,a[i],i);
}
for(int i = 2;i <= n+1;i++) if(query(1,1,n,1,i-1) > lst[i]) able[i] = 1;
//因为lst[i] 初始为0,所以之前我们处理了 1~i 最先出现的位置的段,但是没有处理 lst[i] ~ 结尾 的段,这里在处理一遍
int ans = 1;
for(;able[ans] && ans <= n+1;ans++);
//查找答案,注意ans 上界实际上为 n+2
printf("%d\n",ans);
return 0;
}
本博客作者:Werner_Yin(https://www.cnblogs.com/werner-yin/) ,转载时请注明出处,谢谢支持!
【推荐】国内首个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吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App