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 由乃救爷爷的更多相关文章
- P3793-由乃救爷爷【分块,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出\(n\)个数字的一个序列\(m\)次询问区间最大值 保证数据随机 \(1\leq n,m\ ...
- Luogu3793 由乃救爷爷 分块、ST表
传送门 因为昨天写暴力写挂在UOJ上用快排惨遭卡常,所以今天准备写一个卡常题消遣消遣,然后时间又垫底了QAQ 这道题显然需要支持一个\(O(N)\)预处理\(O(1)\)查询的ST表,显然普通的ST表 ...
- [洛谷P3793]由乃救爷爷
题目大意:有$n(n\leqslant2\times10^7)$个数,$m(m\leqslant2\times10^7)$个询问,每次询问问区间$[l,r]$中的最大值.保证数据随机 题解:分块,处理 ...
- 【Java入门提高篇】Day22 Java容器类详解(五)HashMap源码分析(上)
准备了很长时间,终于理清了思路,鼓起勇气,开始介绍本篇的主角——HashMap.说实话,这家伙能说的内容太多了,要是像前面ArrayList那样翻译一下源码,稍微说说重点,肯定会让很多人摸不着头脑,不 ...
- docker之小记一
PaaS上build新版本的基础组件的镜像总是失败,提示也不是很明确.突然想起来,镜像的依赖关系做过变更,可能是缺少基础镜像的原因. 由于没有统一的仓库或者只是我还不知道,就从制品库下载对应的镜像,然 ...
- 关于静态 RMQ 问题
目录 1. 普通做法 2. Four Russian 算法 3. 随机数据的一种做法 4. 有关转 LCA 的做法 1.1. RMQ 转 LCA 再转 ±1RMQ(RMQ 标准算法) 1.2. 一个优 ...
- luogu P4512 多项式除法 (模板题、FFT、多项式求逆)
手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo/article/details/84853342 题目链接: ht ...
- [luogu]P2279 [HNOI2003]消防局的设立[贪心]
[luogu]P2279 [HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两 ...
- 华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】
本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限重启]说明: 1.本工具包用于华为荣耀6 H60-L02(联通版): ...
随机推荐
- js 格式化数字(每三位加逗号)
// 方法一 unction toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split(' ...
- BZOJ 2940: [Poi2000]条纹(Multi-Nim)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 110 Solved: 70[Submit][Status][Discuss] Description ...
- 洛谷P4103 [HEOI2014]大工程(虚树 树形dp)
题意 链接 Sol 虚树. 首先建出虚树,然后直接树形dp就行了. 最大最小值直接维护子树内到该节点的最大值,然后合并两棵子树的时候更新一下答案. 任意两点的路径和可以考虑每条边两边的贡献,\(d[x ...
- Mysql 常用数据类型
double:浮点型,double(5,2) 表示最多5位,必须包含两位小数,最大值是 999.99 char:定长字符串类型,char(10) 表示必须放 10 的字节,没有就用空格补充 varch ...
- 使用VSTS的Git进行版本控制(七)——管理仓库
使用VSTS的Git进行版本控制(七)--管理仓库 在团队项目中创建Git repo管理项目的源代码.每个Git repo都有自己的权限和分支,可以与项目中的其他工作隔离开来. 任务1:从web门户创 ...
- 2018-05-27-computer-using-hints-电脑使用帮助[持续更新]
layout: post title: 2018-05-27-computer-using-hints-电脑使用帮助 key: 20180527 tags: ubuntu cuda cudnn ten ...
- UE4照片级渲染Demo
- HDFS快速入门
一.简介 HDFS[Hadoop Distributed File System]是Hadoop组件中的分布式存储系统,提供高可靠性.高扩展性和高吞吐率的数据存储服务. 二.存储模型 1.文件线性切割 ...
- Linux 无线网卡配置
无线网卡常见的配置选项 某TL-WR842N路由器无线配置选项含义: 无线名称 路由器的无线(Wi-Fi)名称.无线密码 无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码 ...
- SQL Server 创建用户报错:消息 15023,级别 16,状态 1,第 1 行 用户、组或角色 'XXX' 在当前数据库中已存在。
问题描述: 原因: 当数据库恢复到其他服务器时,原数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户. 这种情况可能会出现上面的问题.该问题是无法通过新建登录或者是 ...