[luogu1198][bzoj1012][JSOI2008]最大数【线段树+分块】
题目描述
区间查询最大值,结尾插入,强制在线。
分析
线段树可以做,但是练了一下分块,发现自己打错了两个地方,一个是分块的地方把/打成了%,还有是分块的时候标号要-1。
其他也没什么要多讲的。
代码
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#pragma GCC optimize(2)
#define ll long long
#define linf 9223372036854775807
#define inf 0x3f3f3f3f
using namespace std;
template <typename T>
inline void read(T &x) {
x = 0; T fl = 1;
char ch = 0;
while (ch < '0' || ch > '9') {
if (ch == '-') fl = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
x *= fl;
}
ll mx[200005], a[200005];
int sum = 0, block, m, tot;
ll d, lst_ans = 0;
void insert(ll x, int n) {
a[n] = x;
if ((n - 1) % block == 0 || n == 1) mx[++ sum] = x;
else mx[sum] = max(x, mx[sum]);
}
ll query(int l, int r) {
int bl = (l - 1) / block + 1, br = (r - 1) / block + 1;
ll res = -inf;
if (bl == br) for (int i = l; i <= r; i ++) res = max(a[i], res);
else {
for (int i = l; i <= bl * block; i ++) res = max(res, a[i]);
for (int i = br * block - block + 1; i <= r; i ++) res = max(res, a[i]);
for (int i = bl + 1; i <= br - 1; i ++) res = max(res, mx[i]);
}
return res;
}
int main() {
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
memset(mx, -inf, sizeof(mx));
read(m); read(d);
block = sqrt(m) / 2;
tot = 0;
for (int i = 1; i <= m; i ++) {
char opt[3]; ll x;
scanf("%s", opt);
read(x);
if (opt[0] == 'A') {
x = ((x + lst_ans) % d + d) % d;
insert(x, ++ tot);
}
else {
lst_ans = query(tot - (int)x + 1, tot);
printf("%lld\n", lst_ans);
}
}
return 0;
}
[luogu1198][bzoj1012][JSOI2008]最大数【线段树+分块】的更多相关文章
- BZOJ1012 [JSOI2008]最大数 线段树
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L> ...
- [JSOI2008]最大数 (线段树)
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>=0 ...
- [JSOI2008]最大数 线段树解法
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- 洛谷 P5897 - [IOI2013]wombats(决策单调性优化 dp+线段树分块)
题面传送门 首先注意到这次行数与列数不同阶,列数只有 \(200\),而行数高达 \(5000\),因此可以考虑以行为下标建线段树,线段树上每个区间 \([l,r]\) 开一个 \(200\times ...
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...
- bzoj1012: [JSOI2008]最大数maxnumber(貌似是道线段树喔)
1012: [JSOI2008]最大数maxnumber 题目:传送门 题解: 发现自己空了一道水题... 1~210000建线段树,其实就是一道裸题... 单点修改+区间查询...1A~ 代码: # ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber
一眼看题目吓了一跳:这TM不就是单调队列吗,200000又怎样,大不了我二分嘛 系统提示:成功开启 手残模式 开始瞎写: #include <cstdio> ]; ]; int m,mod ...
- [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?
其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...
随机推荐
- Centos下启动和关闭MySQL
https://blog.csdn.net/gghh2015/article/details/78281585
- Jmeter监控服务器笔记
Jmeter监控服务器-CPU,Memory,Disk,Network性能指标 本文主要说一下如何通过JMeter插件来监控服务器CPU.内存.磁盘.网络等相关资源. 一.下载 首先进入网址https ...
- asp.net core认证和授权的初始认识--claim、claimsidentity、claimsprincipal
Claim表示一个声明单元,它用来组成ClaimsIdentity.ClaimsIdentity表示一个证件,例如身份证,身份证上面的名字表示一个Claim,身份证号也表示一个Claim,所有这些Cl ...
- Oracle通过ROWID删除表中重复记录
-- 1 通过ROWID删除T1表里重复的记录 SELECT ROWID,A,B--DELETE FROM T1WHERE ROWID IN ( SELECT RD FROM ( ...
- Oracle 强制中止正在执行的SQL语句
-- 1 查询正在执行的sql语句 select b.sid, b.username, b.serial#, a.spid, b.paddr, c.sql_text, b.machine from v ...
- getMessage(),getFile,getLine获取异常用法
try { $param = $request->all(); $param['building_id'] = 0; $param['sync'] = 2; // 1小程序2App $param ...
- countByValue
[1,2,3,3]的RDD rdd.foreach(println)---------------------1 2 3 3
- Windows开启WMI时一些总结
通过远程的方式连接WMI获取计算机信息时,可能会出现远程主机拒绝访问,这时就要通过下面的方式来开启当前计算机的WMI服务,下面以Win7和Win10为例来进行相关的说明,通过一步步排查去连接远程服务. ...
- AI算法第一天【概述与数学初步】
1. 机器学习的定义: 机器从数据中学习出规律和模式,以应用在新数据上作出预测的任务 2.学习现象: (1)语言文字的认知识别 (2)图像,场景,物体的认知和识别 (3)规则:下雨天要带雨伞 (4)复 ...
- mysql从入门到精通
解决MySQL Got a packet bigger than 'max_allowed_packet' bytes 问题在一次性向mysql插入的数据过大,可在my.ini中修改max_allow ...