\(\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. 自定义简单版本python线程池

    python未提供线程池模块,在python3上用threading和queue模块自定义简单线程池,代码如下: #用threading queue 做线程池 import queue import ...

  2. SQLite: sql script demo

    如果有成熟的架构,如何根据数据库关系的表.视图等,进行代码生成架构?减少写代码的时间? -- 考虑主键外键 -- create database geovindu; use geovindu; --2 ...

  3. elementUI vue table status的状态列颜色变化和操作列状态显示(停用, 启用)

    <div id="app" style="display: none"> ... <el-table-column prop="st ...

  4. windows平台vs2010编译64位libiconv与libxml2

    (一)安装libiconv下载路径https://ftp.gnu.org/pub/gnu/libiconv/注意这里选择libiconv-1.11.1版本,因为之后的版本没有Makefile.msvc ...

  5. Html5 和 CSS的简单应用

    本文是利用几个简单的小例子,来实现html+css的简单应用. 菱形链接菜单 本例是采用html5+css3.0设置的菜单链接.其中主要用到了以下几个方面: CSS3.0中的2D变换,如:旋转tran ...

  6. git 代码服务器的网页版gitweb的搭建

    sudo apt-get install apache2 git-core gitwebsudo a2enmod rewrite #vi /etc/gitweb.conf $projectroot = ...

  7. recovery 界面汉化过程详解

    一. 主要是针对recovery汉化,主要汉化对象是界面显示为中文. 二. 基于中文的汉化,有两种方式,一种是基于GB2312的编码格式汉化,另外一种是基于unicode编码格式汉化.下面介绍unic ...

  8. VMware虚拟机CentOS7网络通信与无线上网

    实现主机和虚拟机网络通信 1.虚拟机设置 VMware界面最上面,选择[虚拟机]->[设置]:将网络连接改为"桥接模式",如下图所示: 2.CentOS7网络设置 自动获取I ...

  9. WebRTC 简介及服务搭建、测试

    WebRTC主要解决如下三个问题 1.获取音频和视频. 可以访问输入设备,如话筒.(网络)摄像机(头),可以从上述设备获取媒体数据流.目前需要硬件设备支持VP8/VP9,如果设备仅仅支持H.264/H ...

  10. Spring MVC 拦截器 (十)

    完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) <!--json-->& ...