题意:

①首先定义S为一个有序序列,S={ A1 , A2 , A3 , ... , An },n为元素个数 ;
  ②然后定义Sub为S中取出的一个子序列,Sub={ Ai1 , Ai2 , Ai3 , ... , Aim },m为元素个数 ;
  ③其中Sub满足 Ai1 < Ai2 < Ai3 < ... < Aij-1 < Aij < Aij+1 < ... < Aim ;
  ④同时Sub满足对于任意相连的两个Aij-1与Aij都有 ij - ij-1 > d (1 < j <= m, d为给定的整数);
  ⑤显然满足这样的Sub子序列会有许许多多,而在取出的这些子序列Sub中,元素个数最多的称为“小明序列”(即m最大的一个Sub子序列)。
  例如:序列S={2,1,3,4} ,其中d=1;
  可得“小明序列”的m=2。即Sub={2,3}或者{2,4}或者{1,4}都是“小明序列”。

  当小明发明了“小明序列”那一刻,情绪非常激动,以至于头脑凌乱,于是他想请你来帮他算算在给定的S序列以及整数d的情况下,“小明序列”中的元素需要多少个呢?

思路:

DP的思想,但是只能想到N^2的算法。嘿嘿正好题目有说(0<=Ai<=10^5),那就是了,用线段树保存最值。

每次做题都要考虑周全,边界什么的,,

d=0时单独用贪心的方法算,其实不用也可以,。

代码:

int const N = 100005;

int a[N], f[N];
int F[N<<2];
int n,d; void PushUp(int rt){
F[rt]=max( F[rt<<1],F[rt<<1|1] );
return;
} void build(int l,int r,int rt){
if(l==r){
F[rt]=0;
return;
}
int m=(l+r)>>1;
build(lson);
build(rson);
PushUp(rt);
} void update(int pos,int x,int l,int r,int rt){
if(l==r){
F[rt]=max( F[rt],x );
return;
}
int m=(l+r)>>1;
if(pos<=m)
update(pos,x,lson);
else
update(pos,x,rson);
PushUp(rt);
}
int query(int L,int R,int l,int r,int rt){
if(L<=l && r<=R){
return F[rt];
}
int m=(l+r)>>1;
int res=0;
if(L<=m)
res=max( res,query(L,R,lson) );
if(m<R)
res=max( res,query(L,R,rson) );
return res;
} int proc1(){
int d[N];
int cn=0;
d[0]=-1; rep(i,1,n){
if(a[i]>d[cn]){
d[++cn]=a[i];
}else{
int pos=lower_bound(d+1,d+1+cn,a[i])-d;
d[pos]=a[i];
}
}
return cn;
} int main(){ while(scanf("%d%d",&n,&d)!=EOF){ int es=-inf; rep(i,1,n){
scanf("%d",&a[i]);
es=max( es,a[i] );
} if(d==0){
int ans=proc1();
printf("%d\n",ans);
}else{
build(0,es,1);
int ans=1; rep(i,1,n){
if(i-d-1<=0){
f[i]=1;
}else{
update(a[i-d-1],f[i-d-1],0,es,1); //pos,x,l,r,rt
if(a[i]==0){
f[i]=1;
continue;
}
int t=query(0,a[i]-1,0,es,1); //L,R,l,r,rt
f[i]=t+1;
ans=max( ans,f[i] );
}
}
printf("%d\n",ans);
}
} return 0;
}

最新文章

  1. jvm系列(二):JVM内存结构
  2. Login控件尝试
  3. Ruby FFI 入门教程
  4. pdf转chm的实现方法
  5. js按值传递还是按引用传递?
  6. Zend Server安装后首次运行就出现Internal Server Error的解决
  7. Intent过滤,intent-filter
  8. 生成扫描二维码下载app的二维码的方法
  9. ios animation 动画效果实现
  10. canvas图表详解系列(3):动态饼状图(原生Js仿echarts饼状图)
  11. React Native 网络层分析
  12. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
  13. Setting the Java Class Path
  14. LA3510 Pixel Shuffle
  15. [转]javaweb学习总结(二十九)——EL表达式
  16. mysql 出现的错误
  17. centos 下wps 与goland 不能输入中文的解决办法
  18. 基础篇:6.9)GD&amp;T较线性尺寸公差的优缺点
  19. python反射怎么用
  20. IntelliJ IDEA 2017 创建SpringBoot项目, 及.jar没有主清单属性解决办法

热门文章

  1. File Inclusion(文件包含)
  2. [NOIP2015 普及组] 扫雷游戏
  3. 使用metaweblog API实现通用博客发布 之 版本控制
  4. Docker系列(17)- MySQL同步数据
  5. 深入HTML5第三天
  6. ❤️【Android精进之路-03】创建第一个Android应用程序竟然如此简单❤️
  7. windows日志查看与清理
  8. quicksort 快速排序 quick sort
  9. mybatis多条件多值批量更新
  10. P4351-[CERC2015]Frightful Formula【组合数学,MTT】