先处理出每一个i位置向左最远能到达的位置L[i]。每一次询问,要找到L,R区间中的p位置,p位置左边的L[i]都是小于L的,p位置开始,到R位置,L[i]都大于等于L,对于前者,最大值为p-L,后者求一个区间最大值即可。

  1. #pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<stack>
  11. #include<iostream>
  12. using namespace std;
  13. typedef long long LL;
  14. const double pi=acos(-1.0),eps=1e-;
  15. void File()
  16. {
  17. freopen("D:\\in.txt","r",stdin);
  18. freopen("D:\\out.txt","w",stdout);
  19. }
  20. inline int read()
  21. {
  22. char c = getchar(); while(!isdigit(c)) c = getchar();
  23. int x = ;
  24. while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
  25. return x;
  26. }
  27.  
  28. const int maxn=+;
  29. int n,a[maxn],b[maxn],c[maxn],q,L[maxn];
  30. int dp[maxn][],f[maxn];
  31.  
  32. void RMQ_init()
  33. {
  34. for(int i=;i<n;i++) dp[i][]=f[i];
  35. for(int j=;(<<j)<=n;j++)
  36. for(int i=;i+(<<j)-<n;i++)
  37. dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
  38. }
  39.  
  40. int RMQ(int L,int R)
  41. {
  42. int k=;
  43. while((<<(k+))<=R-L+) k++;
  44. return max(dp[L][k],dp[R-(<<k)+][k]);
  45. }
  46.  
  47. int main()
  48. {
  49. scanf("%d%d",&n,&q);
  50. for(int i=;i<n;i++) scanf("%d",&a[i]),b[i]=a[i];
  51. sort(b, b + n); int sz = unique(b, b + n) - b;
  52. for(int i=;i<n;i++) a[i]=lower_bound(b, b + sz, a[i])-b+;
  53. memset(c,-,sizeof c);
  54. for(int i=;i<n;i++)
  55. {
  56. if(i==) L[]=,c[a[i]]=;
  57. else L[i]=max(L[i-],c[a[i]]+),c[a[i]]=i;
  58. }
  59. for(int i=;i<n;i++) f[i]=i-L[i]+;
  60. RMQ_init();
  61. for(int i=;i<=q;i++)
  62. {
  63. int LL,RR; scanf("%d%d",&LL,&RR);
  64. int l=LL,r=RR,p=-;
  65. while(l<=r)
  66. {
  67. int mid=(l+r)/;
  68. if(L[mid]<LL) l=mid+,p=mid;
  69. else r=mid-;
  70. }
  71. int ans;
  72. if(p==-) ans=RMQ(LL,RR);
  73. else if(p==RR) ans=RR-LL+;
  74. else ans=max(p-LL+,RMQ(p+,RR));
  75. printf("%d\n",ans);
  76. }
  77. return ;
  78. }

POJ 3419 Difference Is Beautiful的更多相关文章

  1. POJ 3419 Difference Is Beautiful(RMQ+二分 或者 模拟)

    Difference Is Beautiful Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%lld & %l ...

  2. POJ 3419 Difference Is Beautiful(RMQ变形)

    题意:N个数,M个询问,每个询问为一个区间,求区间最长连续子序列,要求每个数都不同(perfect sequence,简称PS). 题解:很容易求出以每个数为结尾的ps,也就是求区间的最大值.有一个不 ...

  3. POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)

    题意:给n个数(n<=200000),每个数的绝对值不超过(10^6),有m个查询(m<=200000),每次查询区间[a,b]中连续的没有相同数的的最大长度. 析:由于n太大,无法暴力, ...

  4. POJ 2253 Difference of Clustering

    题意:给出一堆点,求从起点到终点的所有通路中相邻点的距离的最大值的最小值.(意思就是自己百度吧……) 解法:用相邻点的最大值作为权值代替路径的距离跑最短路或者最小生成树.然后我写了一个我以为是优化过的 ...

  5. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  6. POJ 2718 Smallest Difference(最小差)

     Smallest Difference(最小差) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 Given a numb ...

  7. poj 2718 Smallest Difference(穷竭搜索dfs)

    Description Given a number of distinct , the integer may not start with the digit . For example, , , ...

  8. Smallest Difference(POJ 2718)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6740   Accepted: 18 ...

  9. 穷竭搜索: POJ 2718 Smallest Difference

    题目:http://poj.org/problem?id=2718 题意: 就是输入N组数据,一组数据为,类似 [1  4  5  6  8  9]这样在0~9之间升序输入的数据,然后从这些数据中切一 ...

随机推荐

  1. portal安装常见问题

    1.创建portaladmin的url? https://portal.smart.ningbo:7443/arcgis/home/createadmin.html 2.创建portaladmin一闪 ...

  2. 如何在IIS8.5上面部署php

    一.开启,设置win8.1自带的IIS 8.5组件服务器. 进入控制面板,选择程序和功能,打开或关闭Windows 功能,找到Internet information services,分别开启FTP ...

  3. Java实现二叉树先序,中序,后序遍历

    以下是我要解析的一个二叉树的模型形状 接下来废话不多直接上代码 一种是用递归的方法,另一种是用堆栈的方法: 首先创建一棵树: public class Node { private int data; ...

  4. python 在mongo 中建立索引

    import pymongo mongo = pymongo.Connection('localhost') collection = mongo['database']['user'] collec ...

  5. sqlserver和Windows资源管理器争用内存

    sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是

  6. docker安装升级linux内核(2.6.32->3.12.17)

    1.内核升级环境准备 #查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库:yum grouplist#一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具yum ...

  7. scala正则表达式

       正则表达式     Scala 通过 scala.util.matching 包种的 Regex 类来支持正则表达式 scala.util.matching.Regex.构造一个Regex对象, ...

  8. 常用ARM指令集及汇编_破解

    链接地址:http://pan.baidu.com/s/1hsNtxJm

  9. 关于cocos2dx的C++调用创建项目

    我使用的是cocos2dx-2.1.4版本+cygwin,其实主要是为了配合公司项目,所以用了低版本的cocos2dx 假设已经配置环境成功: 按照对应的要求输入包名,项目名,以及TargetId,就 ...

  10. 【转】别人家的孩子之《说说我的web前端之路,分享些前端的好书》

    链接http://www.cnblogs.com/Darren_code/archive/2011/02/09/JavaScript.html   2011-10-31 22:56 by 聂微东 PS ...