傻傻地敲了好多遍ST表。

10119. 「一本通 4.2 例 1」数列区间最大值

#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
struct st {
int a[N][21];
void build(int *src, int n) {
for (int i = 1; i <= n; i++) a[i][0] = src[i];
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++)
a[j][i] = max(a[j][i - 1], a[j + (1 << (i - 1))][i - 1]);
}
int query(int l, int r) {
int j = log2(r - l + 1);
return max(a[l][j], a[r - (1 << j) + 1][j]);
}
};
int n, m, a[N];
st s;
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
s.build(a, n);
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
cout << s.query(u, v) << endl;
}
}

10120. 「一本通 4.2 例 2」最敏捷的机器人

#include <bits/stdc++.h>
using namespace std; struct Monoqueue {
deque<pair<int, int> > q;
void push(int val, int tim) {
while (q.size() && q.front().first >= val) q.pop_front();
q.push_front(make_pair(val, tim));
}
int get(int tim) {
while (q.size() && q.back().second < tim) q.pop_back();
return q.back().first;
}
}; Monoqueue a, b;
int n, k, t; int main() {
ios::sync_with_stdio(false);
cin >> n >> k;
for (int i = 1; i < k; i++) {
cin >> t;
a.push(t, i + k - 1);
b.push(-t, i + k - 1);
}
for (int i = k; i <= n; i++) {
cin >> t;
a.push(t, i + k - 1);
b.push(-t, i + k - 1);
cout << -b.get(i) << " " << a.get(i) << endl;
}
}

10121. 「一本通 4.2 例 3」与众不同

#include <bits/stdc++.h>
using namespace std; int n, m, a[3000005], L, R; namespace Monoqueue {
int head = -1, tail = 0, q[2000005], buck[2000005], jmp[2000005];
void solve() {
for (int i = 1; i <= n; i++) {
q[++head] = a[i];
while (buck[a[i]]) buck[q[tail++]]--;
buck[a[i]]++;
jmp[i] = (head - tail + 1);
}
}
} // namespace Monoqueue namespace ST {
int s[2000005][21];
void build(int n, int *src) {
for (int i = 1; i <= n; i++) s[i][0] = src[i];
for (int j = 1; j < 20; j++)
for (int i = 1; i <= n - (1 << j >> 1); i++) s[i][j] = max(s[i][j - 1], s[i + (1 << j >> 1)][j - 1]);
}
int query(int l, int r) {
int lg = log2(r - l + 1);
return max(s[l][lg], s[r - (1 << lg) + 1][lg]);
}
} // namespace ST int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i], a[i] += 1000000;
Monoqueue::solve();
ST::build(n, Monoqueue::jmp);
for (int i = 1; i <= m; i++) {
int l, r;
cin >> l >> r;
++l;
++r;
int L = 1, R = r - l + 2;
while (R > L) {
int M = (L + R) >> 1;
int x = ST::query(l + M - 1, r);
// cout<<L<<" "<<R<<" "<<M<<" "<<x<<endl;
if (x >= M)
L = M + 1;
else
R = M;
}
cout << L - 1 << endl;
}
}

10122. 「一本通 4.2 练习 1」天才的记忆

#include <bits/stdc++.h>
using namespace std; int n, m, a[1000005][21]; void build() {
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= n - (1 << i >> 1) + 1; j++)
a[j][i] = max(a[j][i - 1], a[j + (1 << i >> 1)][i - 1]);
} int query(int l, int r) {
int lg = log2(r - l + 1);
return max(a[l][lg], a[r - (1 << lg) + 1][lg]);
} int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i][0];
build();
cin >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
cout << query(u, v) << endl;
}
}

10123. 「一本通 4.2 练习 2」Balanced Lineup

#include <bits/stdc++.h>
using namespace std; int n, m, a[1000005][21], b[1000005][21], u, v; int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i][0], b[i][0] = a[i][0];
for (int i = 1; i <= 20; i++)
for (int j = 1; j + (1 << i >> 1) - 1 <= n; j++)
a[j][i] = max(a[j][i - 1], a[j + (1 << i >> 1)][i - 1]),
b[j][i] = min(b[j][i - 1], b[j + (1 << i >> 1)][i - 1]);
for (int i = 1; i <= m; i++) {
cin >> u >> v;
int lg = log2(v - u + 1);
cout << max(a[u][lg], a[v - (1 << lg) + 1][lg]) - min(b[u][lg], b[v - (1 << lg) + 1][lg]) << endl;
}
}

[一本通学习笔记] RMQ专题的更多相关文章

  1. [一本通学习笔记] 最近公共祖先LCA

    本节内容过于暴力没什么好说的.借着这个专题改掉写倍增的陋习,虽然写链剖代码长了点不过常数小还是很香. 10130. 「一本通 4.4 例 1」点的距离 #include <bits/stdc++ ...

  2. [一本通学习笔记] AC自动机

    AC自动机可以看作是在Trie树上建立了fail指针,在这里可以看作fail链.如果u的fail链指向v,那么v的对应串一定是u对应串在所给定字符串集合的后缀集合中的最长的后缀. 我们考虑一下如何实现 ...

  3. [一本通学习笔记] 字典树与 0-1 Trie

    字典树中根到每个结点对应原串集合的一个前缀,这个前缀由路径上所有转移边对应的字母构成.我们可以对每个结点维护一些需要的信息,这样即可以去做很多事情. #10049. 「一本通 2.3 例 1」Phon ...

  4. [一本通学习笔记] KMP算法

    KMP算法 对于串s[1..n],我们定义fail[i]表示以串s[1..i]的最长公共真前后缀. 我们首先考虑对于模式串p,如何计算出它的fail数组.定义fail[0]=-1. 根据“真前后缀”的 ...

  5. jQuery学习笔记(一)jQuery选择器

    目录 jQuery选择器的优点 基本选择器 层次选择器 过滤选择器 表单选择器 第一次写博客,希望自己能够长期坚持,以写博客的方式作为总结与复习. 最近一段时间开始学习jQuery,通过写一个jQue ...

  6. 图灵学院JAVA互联网架构师专题学习笔记

    图灵学院JAVA互联网架构师专题学习笔记 下载链接:链接: https://pan.baidu.com/s/1xbxDzmnQudnYtMt5Ce1ONQ 密码: fbdj如果失效联系v:itit11 ...

  7. KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)

    目录 . 相关阅读材料 . <加密与解密3> . [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Ha ...

  8. KPROCESS IDT PEB Ldr 《寒江独钓》内核学习笔记(3)

    继续上一篇(2)未完成的研究,我们接下来学习 KPROCESS这个数据结构. 1. 相关阅读材料 <深入理解计算机系统(原书第2版)> 二. KPROCESS KPROCESS,也叫内核进 ...

  9. EPROCESS 进程/线程优先级 句柄表 GDT LDT 页表 《寒江独钓》内核学习笔记(2)

    在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结构: EPROCESS/KPROCESS/PEB.把它们放到一起是因为这三个数据结构及其外延和w ...

随机推荐

  1. Java Web笔记(2)

    学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 5.Maven 我为什么要学习这个技术? 在Javaweb开发中,需要使用大量的ja ...

  2. JavaScript中条件分支语句和循环语句的使用,用简洁的代码实现强大功能

    if()  else if()   else() alert() 弹出警告框 prompt() 输入框,确定:返回输入信息:取消:返回null <!DOCTYPE html> <ht ...

  3. Photoshop Elements2020强势来袭,教你三秒钟拯救闭眼照

    Photoshop Elements2020强势来袭,一系列的黑科技让设计师和路人都惊叹不已!若某人的闭眼成为一张集体照的败笔,那该如何挽回? 想要挽救闭眼照?听起来很高大上,很困难?不,Photos ...

  4. const 函数

    const int *p   // 修饰*p ,p指针可以变,但是*p的值不变 例子: int a = 5; int b = 10; const *p = &a; *p = 10: // 不可 ...

  5. 进程无法连接到 Subscriber"XXXXXXX"

    进程无法连接到 Subscriber“APP07”. 在订阅的机器上config 添加别名 APP07

  6. 使用phpstudy向mysql中导入数据

  7. 使用 VMware Workstation Pro 安装新的虚拟机

     一.连接服务器 (1)“文件”右键 (2)输入用户名.密码连接服务器 二.创建新的虚拟机 (1) (2) (3) (4) (5) (6) (7) (8)  三.配置服务器 配置文档 - 链接:htt ...

  8. 硬核干货 | C++后台开发学习路线

    2020秋招提前批 C/C++相关开发 拿到腾讯.华为等offer 学习路线及时间安排 推荐时间为4个月,包括四部分:语言,计算机基础知识,项目基础知识,项目实践. 语言 推荐学习1个月 学习方针:视 ...

  9. 本地连接mysql的url写法

    一.jdbc:mysql:///中三条斜杠(///) 第三个/代表什么? jdbc:mysql:///testdatabase等同于 jdbc:mysql://localhost:3306/testd ...

  10. array every

    every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试.它返回一个布尔值.