HDU 2836 只不过改成了求最长子串。

DP+线段树单点修改+区间查最值。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <algorithm>
  5.  
  6. #define lson l, m, rt << 1
  7. #define rson m + 1, r, rt << 1 | 1
  8.  
  9. using namespace std;
  10.  
  11. const int MAXN = ;
  12.  
  13. int n, d;
  14. int val[MAXN];
  15. int num[MAXN];
  16. int dp[MAXN];
  17.  
  18. int maxi[ MAXN << ];
  19.  
  20. void pushUp( int rt )
  21. {
  22. maxi[rt] = max( maxi[rt << ], maxi[rt << | ] );
  23. return;
  24. }
  25.  
  26. void Update( int L, int c, int l, int r, int rt )
  27. {
  28. if ( l == L && L == r )
  29. {
  30. maxi[rt] = c;
  31. return;
  32. }
  33.  
  34. int m = ( l + r ) >> ;
  35. if ( L <= m ) Update( L, c, lson );
  36. else Update( L, c, rson );
  37. pushUp( rt );
  38. return;
  39. }
  40.  
  41. int Query( int L, int R, int l, int r, int rt )
  42. {
  43. if ( L <= l && r <= R )
  44. return maxi[rt];
  45.  
  46. int m = ( l + r ) >> ;
  47.  
  48. int res = ;
  49. if ( L <= m ) res = max( res, Query( L, R, lson ) );
  50. if ( R > m ) res = max( res, Query( L, R, rson ) );
  51.  
  52. return res;
  53. }
  54.  
  55. int main()
  56. {
  57. while ( ~scanf( "%d%d", &n, &d ) )
  58. {
  59. for ( int i = ; i <= n; ++i )
  60. {
  61. scanf( "%d", &val[i] );
  62. num[i] = val[i];
  63. }
  64.  
  65. sort( num + , num + + n );
  66. int cnt = unique( num + , num + n + ) - num - ;
  67.  
  68. dp[] = ;
  69. memset( maxi, , sizeof(maxi) );
  70. int ans = ;
  71.  
  72. for ( int i = ; i <= n; ++i )
  73. {
  74. int id = lower_bound( num + , num + cnt + , val[i] ) - num;
  75. int left = lower_bound( num + , num + cnt + , val[i] - d ) - num;
  76. int right = upper_bound( num + , num + cnt + , val[i] + d ) - num - ;
  77. dp[i] = Query( left, right, , n, ) + ;
  78. ans = max( ans, dp[i] );
  79. Update( id, dp[i], , n, );
  80. }
  81. printf( "%d\n", ans );
  82. }
  83. return ;
  84. }

ZOJ 3349 Special Subsequence 简单DP + 线段树的更多相关文章

  1. Special Subsequence(离散化线段树+dp)

    Special Subsequence Time Limit: 5 Seconds      Memory Limit: 32768 KB There a sequence S with n inte ...

  2. ZOJ 3349 Special Subsequence

    Special Subsequence Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Ori ...

  3. codeforces750E New Year and Old Subsequence 矩阵dp + 线段树

    题目传送门 思路: 先看一个大牛的题解 题解里面对矩阵的构造已经写的很清楚了,其实就是因为在每个字符串都有固定的很多中状态,刚好可以用矩阵来表达,所以$(i,j)$这种状态可以通过两个相邻的矩阵的$m ...

  4. 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)

    An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...

  5. [Codeforces 280D]k-Maximum Subsequence Sum(线段树)

    [Codeforces 280D]k-Maximum Subsequence Sum(线段树) 题面 给出一个序列,序列里面的数有正有负,有两种操作 1.单点修改 2.区间查询,在区间中选出至多k个不 ...

  6. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. cf834D(dp+线段树区间最值,区间更新)

    题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...

  8. 「CQOI2006」简单题 线段树

    「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...

  9. Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)

    Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...

随机推荐

  1. sharepoint 认证

    MCPD http://www.microsoft.com/learning/en/us/mcpd-certification.aspx#fbid=YktyKIYXeFg Exam 70-573: T ...

  2. Bluetooth

    Android provides a default Bluetooth stack, BlueDroid, that is divided into two layers: The Bluetoot ...

  3. Error: Cannot find module 'express'

    安装Express命令如下: npm install -g express 安装成功之后会在C:\Users\[YOUR_USER_NAME]\AppData\Roaming\npm\node_mod ...

  4. DataTable.Compute 性能慢的问题

    问题描述 工作中碰到一个dt.Compute("max(lineid)","")来取最大行号的情况,由于dt中数据大概有4000条,发现每次调用需要0.3秒的耗 ...

  5. php 安全处理方案

    Safe::mysqlSafe(); sql注入,升级5.3.6以上版本php 方案一:将所有请求中所有数据(get/post/cookie)实现mysql_escape_string进行安全处理. ...

  6. Log4j XML配置

    问题描述:     Log4j  XML配置 问题解决:     (1)编写log4j.xml配置文件 注:     如上的XML文件必须以log4j.xml文件命名,否则无法读取配置文件,同样的如果 ...

  7. NYOJ-733 万圣节派对 AC 分类: NYOJ 2014-01-02 00:41 303人阅读 评论(0) 收藏

    #include <stdio.h> #include <math.h> int main() { int t, a, b, i, j, n; scanf("%d&q ...

  8. [设计模式] 22 模板方法模式 template

    转http://www.jellythink.com/archives/407 在GOF的<设计模式:可复用面向对象软件的基础>一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而 ...

  9. 在windows下用FTP命令上传文件到Linux

    在桌面新建个文件夹,命名成MySQL.rpm.把需要上传的文件放到这个文件夹里.打开cmd窗口,开始用下面命令操作: C:\Users\huyadi>cd C:\Users\huyadi\Des ...

  10. running android lint has encountered a problem

    最近写学习android编程的的时候,每次保存.java文件的时候,总会跳出如下错误 解决: