傻傻地敲了好多遍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. 使用TableHasPrimaryKey或TableHasForeignKey来知道表是否有主键或外键

    从下面2句SQL语句执行来看, 就知道那一张表有主键PrimaryKey或ForeignKey. 比如,表[Q]和[QQ]既没有主键,也没有外键. 当在SQL语句的条件中,使用“=”,那说明查询出来的 ...

  2. UVA1635-唯一分解定理的基本应用2

    原题:https://vjudge.net/problem/UVA-1635 这是一个极其典型的“从素因子角度出发”的题目,下面是我的代码: #include<iostream> #inc ...

  3. dubbox的小案例

    什么是Dubbox: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架.作为一个重要的技术研究课题,在当当网根据自身的需求,为D ...

  4. 聊聊SNMP协议

    注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/snmp-protoco ...

  5. JS实现登录页密码的显示和隐藏功能

    在登录页经常会用到通过点击文本框的类似小眼睛图片来实现隐藏显示密码的功能,其实实现原理很简单,通过点击事件来改变input的type类型,具体过程看代码: 在没给大家分享实现代码之前,先给大家展示下效 ...

  6. 【spring】spring源码阅读之xml读取、bean注入(BeanFactory)

    前言 此源码其实是在4月中旬就看了,而且当初也写了一份word文档,但不打算直接把word发上来.还是跟着以前的笔记.跟踪代码边看边写吧. 其实当初看源码的理由很简单,1.才进新公司,比较有空闲.2. ...

  7. 今日头条 SEO 研究,值得深思的 5 个问题

    在做SEO的过程中,实际上,我并不是“技术挂”更多的是基于搜索原理与大量的实战,总结相关的经验,这么多年,经常养成一个小习惯,总是记录一些工作中遇到的一些小问题与小技巧. 特别是2017年,12月份开 ...

  8. R 分析回归(一元回归)

    x <- c(,,,,,,,,,) # build X(predictor) y <- c(,,,,,,,,,) # build Y(dependent variable) mode(x) ...

  9. ArcScene 创建三维模型数据

    1. 拉伸 添加面元素图层 在图层上右键----属性 , 设置拉伸值,可以输入固定值或者选择字段值. 2. 导入   3DMAX 的 3ds 文件,和 Google SketchUp 的skp文件, ...

  10. 实现字符串和从0到n-1范围内的数字串的一一对应---->poj1200

    #include<iostream> using namespace std; ; int num[maxn]; string s; int main() { int nc;//字符串s中 ...