洛谷 P3865 【模板】ST表

题目:

  • 因为是水题,直接丢链接了:链接

题解:

  • 把这题丢上来的原因是因为以前学ST的时候是真的水=.=,几乎就是背代码。
  • 现在重新看书后有了较深刻的理解:
  • 递推时,有公式f(i, j) = max(f(i, j - 1), f(i + \(2^{k+1}\), j - 1)),即长度为\(2^j\)的区间的最大值是左右两半长度为\(2^{j - 1}\)的子区间的max
  • 当查询时,先计算出一个k,使得\(2^k\) < r - l + 1 <= \(2^{k + 1}\),那么以l开始的\(2^k\)个数和以r结尾的\(2^k\)个数一定覆盖了整个区间(l, r)。所以取这两子区间的max即可
  • 证明很容易,因为两个子区间的长度都为\(2^k\),那么两个子区间的长度和就是\(2^k\) * 2 = \(2^{k+1}\),又\(2^{k+1}\) >= r - l + 1,所以一定覆盖。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define N 100005
using namespace std;int n, q, logg;
int f[N][31];int read()
{int x = 0; char c = getchar();while(c < '0' || c > '9') c = getchar();while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x;
}int main()
{memset(f, -0x3f, sizeof(f));cin >> n >> q;for(int i = 1; i <= n; i++) f[i][0] = read();logg = (int)log2(n);for(int j = 1; j <= logg; j++)for(int i = 1; i <= n - (1 << j) + 1; i++)f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);for(int i = 1; i <= q; i++){int l = read(), r = read();logg = (int)log2(r - l + 1);printf("%d\n", max(f[l][logg], f[r - (1 << logg) + 1][logg]));}return 0;
}

转载于:https://www.cnblogs.com/BigYellowDog/p/11279681.html

洛谷 P3865 【模板】ST表相关推荐

  1. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  2. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  3. 倍增:st表(模板)(洛谷P3865)

    [传送门](https://www.luogu.com.cn/problem/P38 解析 板子题最棒了 用mx[i][j]存储以i为起点,长度为2^j次方的区间内的max 分成前后两段,则可以得到递 ...

  4. 洛谷 P1816 忠诚 ST函数

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  5. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  6. 强连通分量:洛谷P3387 模板:缩点

    传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...

  7. 洛谷P3371-【模板】单源最短路【SPFA】

    题目 一个有向图,求一点到所有点的最短距离 输入 4 6 1(4个点,6条边,从1出发) 1 2 2(1点到2点有一条权值2的线) 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 输出 0 ...

  8. 洛谷 - P2181 - 对角线 - 打表 - 组合数学

    https://www.luogu.org/problemnew/show/P2181 对于某条对角线,除去从两端出发的对角线,其他的都与它有1个交点. 每个点有(n-3)条对角线,每条对角线和其余C ...

  9. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

最新文章

  1. R语言ggplot2包和lattice包可视化改变x轴和y轴的显示位置实战
  2. HTML 框架 frameset,frame
  3. 第8章 Iptables与Firewalld防火墙
  4. Django MTV模型思想
  5. 为Process.waitFor设置超时
  6. 在Zephyr上使用malloc/new
  7. 浅谈Linux用户权限管理之三(文件与权限的设定)
  8. matlab自适应高斯滤波,[matlab] 自适应高斯滤波器在二维图像上的应用
  9. 手机端html怎么复制到剪贴板,移动端和pc端的复制到剪贴板功能
  10. 灾害可视化:全国进入汛期,多地预警,全国多省进入暴雨洪灾状态、地图GIS数据可视化、雷达云图、等值线、等值面绘制
  11. STM32 之 USB 虚拟串口
  12. 银行账户模拟java_使用Java模拟银行账户存、取款、转账功能
  13. 4.8 putsgets函数
  14. 2015程序猴的总结:不破楼兰终不还!
  15. SQL 如何返回最大值所在的多条记录
  16. L2-037 包装机
  17. 什么是爱情——碧海青天BBS
  18. win10 安装sqlserver2008
  19. 每日新闻:阿里云掀起新一轮价格大战;比特大陆正式发布AI芯片;百度区块链实验室落户海南;救市意图明显 北京海淀区成立百亿纾困基金...
  20. Bresenham逆时针圆弧生成算法

热门文章

  1. 【译】Diving Into The Ethereum VM Part 3 — The Hidden Costs of Arrays
  2. 两种AIDL用法分析(原)
  3. 登陆失败bdstoken_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题
  4. MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...
  5. 公文字体字号标准2020_党政机关公文格式典型错误20例,引起重视!
  6. 运维开发学go还是python_运维工程师是要学python还是学go那?
  7. linux打开sqlite3数据库,Centos6.5中如何用sqlite3命令打开’.db’后缀的数据库执行sql...
  8. uva1504(模拟+暴力)
  9. JZOJ__Day 2:【普及模拟】串
  10. 麦咭早教机器人_【今日吐槽】这句台词有毒!完全忘不了!(机器人免费送)...