Input

第一行给出一个数字N,接下来N+1行,每行给出一个数字Ai,(0<=i<=N<=1E6)
接来给出一个数字Q(Q<=7000),代表有Q个询问
每组询问格式为a,b即询问从输入的第a个数到第b个数,其中的最大值是多少

Output

如题所述

Sample Input

  1. 10
  2. 0
  3. 1
  4. 2
  5. 3
  6. 2
  7. 3
  8. 4
  9. 3
  10. 2
  11. 1
  12. 0
  13. 5
  14. 0 10
  15. 2 4
  16. 3 7
  17. 7 9
  18. 8 8

Sample Output

  1. 4
  2. 3
  3. 4
  4. 3
  5. 2

这题就怎么说呢,范围怎么大,暴力显然超时,st表表示起来也简单,就是一直把一个区间分成两块,求两块的最大值再比较(怎么那么像区间dp),然后这种划分又要用到倍增,就需要二进制,所以理解起来还是有一定的难度(有dp的预处理)

代码:

  1. #include<cmath>
  2. #include<iostream>
  3. using namespace std;
  4. char ch; bool ok;
  5. void read(int &x){
  6. for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
  7. for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
  8. if (ok) x=-x;
  9. }
  10. int a[],n,m,f[][],x,y,now;
  11. void st(int n)
  12. {
  13. for(int j=;j<=;j++)
  14. for(int i=;i<=n;i++)
  15. if(i+(<<j)-<=n)
  16. f[i][j]=max(f[i][j-],f[i+(<<(j-))][j-]);
  17. }
  18. int main()
  19. {
  20. read(n);
  21. for(int i=;i<=n;i++)
  22. read(a[i]);
  23. for(int i=;i<=n;i++)
  24. f[i][]=a[i];
  25. st(n);
  26. read(m);
  27. for(int i=;i<=m;i++)
  28. {
  29. read(x),read(y);
  30. now=(int)(log(y-x+)/log());
  31. printf("%d\n",max(f[x][now],f[y-(<<now)+][now]));
  32. }
  33. }

st表求区间最大值的更多相关文章

  1. ST表求区间最值

    #include<bits/stdc++.h> #define ll long long #define lowbit(x) x&-x using namespace std; ; ...

  2. [51nod 1766]树上的最远点对 (树的直径+ST表求lca+线段树)

    [51nod 1766]树上的最远点对 (树的直径+ST表求lca+线段树) 题面 给出一棵N个点的树,Q次询问一点编号在区间[l1,r1]内,另一点编号在区间[l2,r2]内的所有点对距离最大值.\ ...

  3. HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)

    HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值) 点我挑战题目 题意分析 从题目中可以看出是大数据的输入,和大量询问.基本操作有: 1.Q(i,j)代表求区间max(a ...

  4. HDU - 1754 I Hate It (线段树单点修改,求区间最大值)

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...

  5. HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)

    线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...

  6. ST表 求 RMQ(区间最值)

    RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...

  7. hdu1754 区间更新查询(单点更新+查询求区间最大值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. HDU 1754 单点更新,求区间最大值

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. hdoj 5443 The Water Problem【线段树求区间最大值】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5443 刷道水题助助兴 #include<stdio.h> #include<stri ...

随机推荐

  1. linux杂谈(十三):代理server

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/linux_player_c/article/details/24707457 1.代理server的 ...

  2. Ubuntu 下安装Source Insight [转]

    本文转载自:http://blog.csdn.net/yunfeiyang62/article/details/46662633 安装Source Insight之前需要先安装Wine,然后用Wine ...

  3. HDU4850 Wow! Such String! —— 字符串构造

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4850 代码如下: #include <iostream> #include <cst ...

  4. Java接口测试之使用有道翻译API

    写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...

  5. 花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不吐不快

    http://www.cnweblog.com/fly2700/archive/2011/12/06/318916.html (转载) 花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不 ...

  6. 理解HTML解析过程

    浏览器解析html的过程是:接受网络数据->将二进制码变成字符->将字符变为unicode code points.->tokenizer ->tree constructor ...

  7. 2013 gzhu acm

    题目描述: Word Counting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Other ...

  8. Keras 可视化 model

    参考:https://keras.io/visualization/ error解决参考:http://blog.csdn.net/wangjian1204/article/details/50346 ...

  9. Nginx基本配置和作用

    nginx可以重新加载文件的.我们直接运行:nginx -s reload 配置文件有没有问题,可以直接输入:nginx -t nginx -s stop就可以关闭 但有时我们就不想它挂的时候访问另外 ...

  10. 查看Ubuntu的版本

    方法一: cat /etc/issue 方法二: lsb_release -a