题解 [ABC339E] Smooth Subsequence
简单的 E,使我先跳过 D。
题意
给一个
分析
考虑动态规划。
状态设计
设
转移方程
观察到这是一个
时间复杂度
代码
//the code is from chenjh
#include<cstdio>
#include<algorithm>
#define MAXN 500005
#define lson (rt<<1)
#define rson (rt<<1|1)
using namespace std;
using ci=const int;
const int A=500000;//A 的最大值。
int n,d;
int mx[MAXN<<2];//线段树维护最大值
void update(ci rt,ci l,ci r,ci pos,ci val){
if(l==r && l==pos){mx[rt]=max(mx[rt],val);return;}
int mid=(l+r)>>1;
if(pos<=mid) update(lson,l,mid,pos,val);
else update(rson,mid+1,r,pos,val);
mx[rt]=max(mx[lson],mx[rson]);
}
int query(ci rt,ci l,ci r,ci L,ci R){
if(L<=l && r<=R) return mx[rt];
int mid=(l+r)>>1,ret=0;
if(L<=mid) ret=max(ret,query(lson,l,mid,L,R));
if(mid<R) ret=max(ret,query(rson,mid+1,r,L,R));
return ret;
}
int main(){
scanf("%d%d",&n,&d);
for(int i=1,a;i<=n;i++)
scanf("%d",&a),update(1,1,A,a,query(1,1,A,max(a-d,1),min(a+d,A))+1);//求出 f_i 更新最大值。
printf("%d\n",query(1,1,A,1,A));//查询整个动态规划数组的最大值。
return 0;
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端