\(\verb|Luogu 3793 由乃救爷爷|\)

rmq,数据随机

\(n,\ m\leq 2\times10^7\)

lxl ST表


分块,大小设为 \(x\)

预处理每个块两端到块内每个点的前缀 \(\max\) 和后缀 \(\max\)

预处理块间ST表

数据随机

就成了期望 \(O(n)\) 的rmq

重点是没人卡你,卡还不一定卡的住,还要冒着被暴力AC的风险

然后就愉悦地~

#include <bits/stdc++.h>
using namespace std; #define get(x) (((x) + 63) >> 6)
typedef unsigned uint;
const int maxn = 2e7 + 10;
int n, m, K, tot, a[maxn], lef[maxn], rig[maxn], lg[maxn >> 6], val[20][maxn >> 6]; namespace GenHelper {
uint z1, z2, z3, z4, b;
inline uint rnd() {
b = ((z1 << 6) ^ z1) >> 13;
z1 = ((z1 & 4294967294u) << 18) ^ b;
b = ((z2 << 2) ^ z2) >> 27;
z2 = ((z2 & 4294967288u) << 2) ^ b;
b = ((z3 << 13) ^ z3) >> 21;
z3 = ((z3 & 4294967280u) << 7) ^ b;
b = ((z4 << 3) ^ z4) >> 12;
z4 = ((z4 & 4294967168u) << 13) ^ b;
return (z1 ^ z2 ^ z3 ^ z4);
}
} inline void srand(uint x) {
using namespace GenHelper;
z1 = x;
z2 = (~x) ^ 0x233333333u;
z3 = x ^ 0x1234598766u;
z4 = (~x) + 51;
} inline int read() {
using namespace GenHelper;
int a = rnd() & 32767;
int b = rnd() & 32767;
return a << 15 | b;
} inline int query(int l, int r) {
if (l > r) return 0;
int tmp = lg[r - l + 1];
return max(val[tmp][l], val[tmp][r - (1 << tmp) + 1]);
} int main() {
scanf("%d %d %d", &n, &m, &K);
srand(K);
for (int i = 1; i <= n; ++i) {
a[i] = read();
val[0][get(i)] = max(a[i], val[0][get(i)]);
}
tot = get(n);
for (int i = 2; i <= tot; ++i) {
lg[i] = lg[i >> 1] + 1;
}
for (int i = 1, lst = 0; i <= n; ++i) {
lef[i] = lst = max(a[i], lst);
if (!(i & 63)) lst = 0;
}
for (int i = n, lst = 0; i; --i) {
if (!(i & 63)) lst = 0;
rig[i] = lst = max(a[i], lst);
}
for (int i = 1; i < 21; ++i) {
for (int j = 1; j + (1 << i) - 1 <= tot; ++j) {
val[i][j] = max(val[i - 1][j], val[i - 1][j + (1 << (i - 1))]);
}
}
unsigned long long ans = 0;
for (int q = 1, l, r, L, R, res; q <= m; ++q) {
l = read() % n + 1;
r = read() % n + 1;
if (l > r) l ^= r ^= l ^= r;
L = get(l), R = get(r), res = 0;
if (L == R) {
for (int i = l; i <= r; ++i) {
res = max(res, a[i]);
}
} else {
res = max(max(rig[l], lef[r]), query(L + 1, R - 1));
}
ans += res;
}
printf("%llu", ans);
return 0;
}

Luogu 3793 由乃救爷爷的更多相关文章

  1. P3793-由乃救爷爷【分块,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出\(n\)个数字的一个序列\(m\)次询问区间最大值 保证数据随机 \(1\leq n,m\ ...

  2. Luogu3793 由乃救爷爷 分块、ST表

    传送门 因为昨天写暴力写挂在UOJ上用快排惨遭卡常,所以今天准备写一个卡常题消遣消遣,然后时间又垫底了QAQ 这道题显然需要支持一个\(O(N)\)预处理\(O(1)\)查询的ST表,显然普通的ST表 ...

  3. [洛谷P3793]由乃救爷爷

    题目大意:有$n(n\leqslant2\times10^7)$个数,$m(m\leqslant2\times10^7)$个询问,每次询问问区间$[l,r]$中的最大值.保证数据随机 题解:分块,处理 ...

  4. 【Java入门提高篇】Day22 Java容器类详解(五)HashMap源码分析(上)

    准备了很长时间,终于理清了思路,鼓起勇气,开始介绍本篇的主角——HashMap.说实话,这家伙能说的内容太多了,要是像前面ArrayList那样翻译一下源码,稍微说说重点,肯定会让很多人摸不着头脑,不 ...

  5. docker之小记一

    PaaS上build新版本的基础组件的镜像总是失败,提示也不是很明确.突然想起来,镜像的依赖关系做过变更,可能是缺少基础镜像的原因. 由于没有统一的仓库或者只是我还不知道,就从制品库下载对应的镜像,然 ...

  6. 关于静态 RMQ 问题

    目录 1. 普通做法 2. Four Russian 算法 3. 随机数据的一种做法 4. 有关转 LCA 的做法 1.1. RMQ 转 LCA 再转 ±1RMQ(RMQ 标准算法) 1.2. 一个优 ...

  7. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)

    手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo/article/details/84853342 题目链接: ht ...

  8. [luogu]P2279 [HNOI2003]消防局的设立[贪心]

    [luogu]P2279 [HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两 ...

  9. 华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】

    本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限重启]说明: 1.本工具包用于华为荣耀6 H60-L02(联通版): ...

随机推荐

  1. Locust 安装

    环境:CentOS 7.4,python2.7.5 # 安装 pip yum -y install python-pip # 安装 locustio pip install locustio mkdi ...

  2. 系统调用fork()在powerpc上的源码分析

    总结一句话:系统调用的本质,通过sc指令触发异常,完成用户态到内核的转换. 展开一些:应用程序调用fork(),fork()是一个glibc函数,该函数的最底层调用sc指令,触发cpu异常,从而完成从 ...

  3. 如何获取view的大小

    很多初学者都会犯一个错误 ,就是在onCreate或者onStart里面去获取view的大小,然而这样获取到的宽高通常都是0,为什么呢?因为view的测量过程和activity的生命周期不是同步的,因 ...

  4. 浅谈SnackBar(Toast大兄弟)

    SnackBar是 Android Support Library 22.2.1 里面新增提供的一个控件,我们可以简单的把它理解成一个加强版的Toast,或者是一个轻量级的Dialog. 特点: .S ...

  5. Android为TV端助力 am命令以及hotkey文件的编写

    1.拨打电话:am start -a android.intent.action.CALL -d tel:10086 这里-a表示动作,-d表述传入的数据,还有-t表示传入的类型. 2. 打开一个网页 ...

  6. Kotlin入门(29)任务Runnable

    任务Runnable定义了一个可以独立运行的代码片段,通常用于界面控件的延迟处理,比如有时为了避免同时占用某种资源造成冲突,有时则是为了反复间隔刷新界面从而产生动画效果.运行一个任务也有多种形式,既可 ...

  7. IDEA基于Maven Struts2搭建配置及示例

    1.web.xml加载struts框架即过滤器,要注意struts版本不同过滤器配置也不同. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems ...

  8. 【粗糙版】javascript的变量、数据类型、运算符、流程结构

    本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...

  9. (python)数据结构---集合

    一.描述 set翻译为集合 set是可变的.无序的.不可重复的 set的元素要求可哈西(不可变的数据类型可哈西,可变的数据类型不可哈希) set是无序的,因此不可以索引,也不可以修改 线型结构的查询时 ...

  10. MySQL优化技巧【持续更新】

    前言 应用程序或web网页有时慢的像蜗牛爬似的,可能是网络原因,可能是系统架构原因,还有可能是数据库原因.那么如何提高数据库SQL语句执行速度呢?下面是积累的一些优化技巧,望对君有用. 正文 1.比较 ...