DP/单调队列优化

  题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html

  引用:

首先我们要明确几件事情

1.假设我们现在知道序列(i,j)是符合标准的,那么如果第j+1个元素不比(i,j)最大值大也不比最小值小,那么(i,j+1)也是合法的

2.如果(i,j)不合法的原因是差值比要求小,那在(i,j)范围内的改动是无效的,需要加入j+1元素充当最大值或者最小值才可能获得合法的序列

3.假设序列(i,j)的差值比要求大,那么我们必须将其中的最大值或者最小值从序列中删除出去,才可能获得一个合法的序列,只往里加入元素是不可能令序列合法的

  1. //HDOJ 3530
  2. #include<cmath>
  3. #include<queue>
  4. #include<vector>
  5. #include<cstdio>
  6. #include<cstring>
  7. #include<cstdlib>
  8. #include<iostream>
  9. #include<algorithm>
  10. #define rep(i,n) for(int i=0;i<n;++i)
  11. #define F(i,j,n) for(int i=j;i<=n;++i)
  12. #define D(i,j,n) for(int i=j;i>=n;--i)
  13. #define pb push_back
  14. #define CC(a,b) memset(a,b,sizeof(a))
  15. using namespace std;
  16. int getint(){
  17. int v=,sign=; char ch=getchar();
  18. while(!isdigit(ch)) {if(ch=='-') sign=-; ch=getchar();}
  19. while(isdigit(ch)) {v=v*+ch-''; ch=getchar();}
  20. return v*sign;
  21. }
  22. const int N=1e6+,INF=~0u>>;
  23. const double eps=1e-;
  24. /*******************template********************/
  25.  
  26. deque<int>mx,mn;
  27. int a[N];
  28. int main(){
  29. #ifndef ONLINE_JUDGE
  30. freopen("input.txt","r",stdin);
  31. // freopen("output.txt","w",stdout);
  32. #endif
  33. int n,m,k;
  34. while(scanf("%d%d%d",&n,&m,&k)!=EOF){
  35. int start=,ans=;
  36. F(i,,n) a[i]=getint();
  37. mx.clear(); mn.clear();
  38. F(i,,n){
  39. while(!mx.empty() && a[mx.back()]<=a[i]) mx.pop_back();
  40. while(!mn.empty() && a[mn.back()]>=a[i]) mn.pop_back();
  41. mx.pb(i); mn.pb(i);
  42. while(a[mx.front()]-a[mn.front()]>k){
  43. if (mx.front()<mn.front()){
  44. start=mx.front();
  45. mx.pop_front();
  46. }else{
  47. start=mn.front();
  48. mn.pop_front();
  49. }
  50. }
  51. if (a[mx.front()]-a[mn.front()]>=m)
  52. ans=max(i-start,ans);
  53. }
  54. printf("%d\n",ans);
  55. }
  56. return ;
  57. }

【HDOJ】【3530】Subsequence的更多相关文章

  1. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

  2. 【集训笔记】博弈论相关知识【HDOJ 1850【HDOJ2147

    以下资料来自:http://blog.csdn.net/Dinosoft/article/details/6795700 http://qianmacao.blog.163.com/blog/stat ...

  3. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  4. 【HDOJ 5379】 Mahjong tree

    [HDOJ 5379] Mahjong tree 往一颗树上标号 要求同一父亲节点的节点们标号连续 同一子树的节点们标号连续 问一共同拥有几种标法 画了一画 发现标号有二叉树的感觉 初始标号1~n 根 ...

  5. HDOJ 1238 Substrings 【最长公共子串】

    HDOJ 1238 Substrings [最长公共子串] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  6. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  7. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  8. 【题解】Greatest Common Increasing Subsequence

    [题解]Greatest Common Increasing Subsequence vj 唉,把自己当做DP入门选手来总结这道题吧,我DP实在太差了 首先是设置状态的技巧,设置状态主要就是要补充不漏 ...

  9. 【HDOJ 2089】不要62

    [HDOJ 2089]不要62 第一个数位dp的题 做的老困难了...只是好歹是做出来了 迈出了第一步.. 对大牛来说这样的题都是小case ps:新上一个记忆化方法 一些绕弯的题里用dfs好想些 代 ...

  10. 【HDOJ 5371】 Hotaru&#39;s problem

    [HDOJ 5371] Hotaru's problem Manacher算法+穷举/set Manacher算法一好文:http://blog.csdn.net/yzl_rex/article/de ...

随机推荐

  1. C#语法基础和面向对象编程

    1.C#语法基础 http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html 2.C#与面向对象基础 很棒的资源,简明扼要,介绍的非常清 ...

  2. project 2010 使用技巧

    快捷键 设置任务子任务 ALT+SHIFT+向右方向键 1.工作时间设置 新建一个日历后,可以在 “项目 >> 项目信息 >> 日历” 中进行选择

  3. Nginx+Tomcat+Memcached集群

    Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的效率比较低,在大并发下表 ...

  4. sprintf函数减少字符串拼接错误

    $return_string=""; foreach($cat_list as $value){ $return_string .= sprintf('<dd>< ...

  5. seeting菜单界面形成--优化

    本文是上一篇文章的优化版: 上文链接地址:http://www.cnblogs.com/zzw1994/p/5016864.html 上文中有很多方法都是过时,并且效率不是很高,主要对JAVA代码进行 ...

  6. 使用了Theme但是没有效果问题

    最近在开发过程中使用了theme移植Preference并使用了一些android样式,但是在自定义的Theme修改了相关参数后却无法实现 可能有些朋友还不知道怎么用.这里也做个简要的使用方式说明. ...

  7. IL中的栈和闪电的Owin推荐

    最近几天有幸得到闪电大哥的指点,了解了EMIT和IL中的一些指令.虽然有高射炮打蚊子的说法,但是我相信“二八定律”,80%的功能可以用20%的技术解决,20%的功能只能用80%的技术解决.大哥的博客: ...

  8. Ruby求出数组中最小值及其下标

    其实很简单 Ruby的Array类自带了min方法可以求出最小值,然后调用Array的index方法传入元素值就可以求出下标 a = [1, 2, 3, 4, 5, 6] theMin = a.min ...

  9. C# 自定义集合

    自定义类型 public class Product { public int Id { get; set; } // 自增ID public string Name { get; set; } // ...

  10. main函数的argc和argv

      int main(int argc, char const *argv[]) { printf("argc : %c\n",argc); printf(] ); printf( ...