浅谈 倍增/ST表】的更多相关文章

命题描述 给定一个长度为 \(n\) 的序列,\(m\) 次询问区间最大值 分析 上面的问题肯定可以暴力对吧. 但暴力肯定不是最优对吧,所以我们直接就不考虑了... 于是引入:倍增 首先,倍增是个什么东西? 在这里转一篇写的超棒的blog,点我.要是这都没看懂你就连小白兔都不如我就无语了. 总的来说,其实就是倒着运用二分的思想,从需求小的慢慢倍增把答案更新到需求大的 ST表就是一种常见的倍增思想的运用 关于ST表 ST表和树状数组,线段树这两种算法一样,是一种用于解决 \(RMQ(Range M…
今天打了人生第一道ST表题(其实只是ST表跑得最快); ST表是一种用来解决RMQ问题的利器... 大体操作有两步: 第一部分nlogn预处理 第二部分O(1)询问 预处理就是运用倍增+区间动规 ST表使用DP思想求解区间最值,貌似属于区间动态规划,不过区间在增加时,每次并不是增加一个长度,而是使用倍增的思想,每次增加2^i个长度. 使用F[i,j]表示以i为起点,区间长度为2^j的区间最值,此时区间为[i,i + 2^j - 1]. 比如,F[0,2]表示区间[0,3]的最值,F[2,2]表示…
正题 题目链接:https://www.luogu.com.cn/problem/P7599 题目大意 \(n\)棵树,在某棵树上时可以选择向左右两边第一棵比它高的树跳,现在\(q\)次询问从\([A,B]\)中某个点出发跳到\([C,D]\)中某个点的最少次数. \(1\leq n\leq 2\times 10^5\) 解题思路 考虑到主要的阈值\([B+1,C-1]\)中的最大值,一旦超过了这个值就只需要考虑是否大于\([C,D]\)中的最大值就好了. 那么我们考虑如何选取起点,首先我们显然…
[HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示\(a,b,n\)的值 第二行至第\(a+1\)行每行为\(b\)个非负整数,表示矩阵中相应位置上的数.每行相邻两数之间用一空格分隔. 输出格式: 仅一个整数,为\(a*b\)矩阵中所有\(n*n\)正方形区域中的最大整数和最小整数的差值"的最小值. 输入输出样例 输入样例…
题目链接:https://www.luogu.org/problemnew/show/P3379 刚学了LCA,写篇blog加强理解. LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. ---来自百度百科 例如: 在这棵树中 17 和 8 的LCA就是 3 .9 和 7 的LCA就是 7 . 明白了LCA后,就下来我们就要探讨探讨LCA怎么求了 qwq 暴力算法 以 17 和 18 为例,既然要求LCA,那么我们就让他们…
哈希表:通过key-value而直接进行访问的数据结构,不用经过关键值间的比较,从而省去了大量处理时间. 哈希函数:选择的最主要考虑因素--尽可能避免冲突的出现 构造哈希函数的原则是: ①函数本身便于计算: ②计算出来的地址分布均匀,即对任一关键字k,f(k) 对应不同地址的概率相等,目的是尽可能减少冲突. 1.直接定址法: 如果我们现在要对0-100岁的人口数字统计表,那么我们对年龄这个关键字就可以直接用年龄的数字作为地址.此时f(key) = key.   这个时候,我们可以得出这么个哈希函…
1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的表变量. 若要创建用户定义表类型,请使用CREATE TYPE语句.为了确保用户定义表类型的数据满足特定要求,您可以对用户定义表类型创建唯一约束和主键. 1.2 使用例题 在创建用户定义表类型前先建立一个数据库表 USE [Contacting] GO SET ANSI_NULLS ON GO SE…
关于分表:顾名思义就是一张数据量很大的表拆分成几个表分别进行存储. 我们先来大概了解以下一个数据库执行SQL的过程: 接收到SQL --> 放入SQL执行队列 --> 使用分析器分解SQL --> 按照分析结果进行数据的提取或者修改 --> 返回处理结果.在这个过程中一般比较花时间的是在队列里的等待时间和执行时间.归根到底就是执行时间,执行时间减少了等待时间自然就变短了. 为了保证数据的完整性,数据库有锁定机制.MySQL中有表锁定和行锁定,MySQL中myisam存储引擎是表锁定…
#include<iostream> #include<cmath> using namespace std; ; int a[maxn]; ]; ]; int quick(int a,int n) { ; while(n) { ) ans*=a; a=a*a; n>>; } return ans; } int main() { int n,m; cin>>n>>m; ;i<=n;i++) cin>>a[i]; ;i--) {…
图书管理 题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需要支持 2 种操作: add(s) 表示新加入一本书名为 s 的图书. find(s) 表示查询是否存在一本书名为 s 的图书. 输入格式 第一行包括一个正整数 n,表示操作数. 以下 n 行,每行给出 2 种操作中的某一个指令条,指令格式为: add s find s 在书名 s 与指令…