P2251 质量检测(分块线段树RMQ单调队列)
P2251 质量检测
正解应该是ST表和单调队列,不过对于这道题来说只有查询没有修改,这里我还是想用线段树和分块来写,不得不说分块是真好,优雅的暴力
线段树版本:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 1e6 + 10;
struct SegmentTree{
int l, r;
int minn;
#define l(x) tree[x].l
#define r(x) tree[x].r
#define minn(x) tree[x].minn
}tree[4 * N];
int n, m, a[N];
void build(int p, int l, int r)
{
l(p) = l, r(p) = r;
if(l == r) {minn(p) = a[l]; return;}
int mid = (l + r) >> 1;
build(p << 1, l, mid);
build(p << 1 | 1, mid + 1, r);
minn(p) = min(minn(p << 1), minn(p << 1 | 1));
}
int ask(int p, int l, int r)
{
if(l <= l(p) && r >= r(p)) return minn(p);
int mid = (l(p) + r(p)) >> 1;
int val = 1e9;
if(l <= mid) val = min(ask(p << 1, l , r), val);
if(r > mid) val = min(ask(p << 1 | 1, l, r), val);
return val;
}
void solve()
{
cin >> n >> m;
for(int i = 1; i <= n; ++ i) cin >> a[i];
build(1, 1, n);
for(int i = 1; i + m - 1 <= n; ++ i) cout << ask(1, i, i + m - 1) << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
solve();
return 0;
}
分块版本
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 1e6 + 10;
int a[N], n, m, block[N], ans[N], bl;
int ask(int l, int r)
{
int p = block[l], q = block[r], res = 1e9;
if(p == q) for(int i = p; i <= q; ++ i) res = min(res, a[i]);
else
{
for(int i = p + 1; i <= q - 1; ++ i) res = min(res, ans[i]);
for(int i = l; i <= p * bl; ++ i) res = min(res, a[i]);
for(int i = (q - 1) * bl + 1; i <= r; ++ i) res = min(res, a[i]);
}
return res;
}
void solve()
{
cin >> n >> m;
for(int i = 1; i <= n; ++ i) cin >> a[i];
bl = sqrt(n);
memset(ans, 0x3f, sizeof ans);
for(int i = 1; i <= n; ++ i)
{
block[i] = (i - 1) / bl + 1;
ans[block[i]] = min(ans[block[i]], a[i]);
}
for(int i = 1; i + m - 1 <= n; ++ i) cout << ask(i, i + m - 1) << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
solve();
return 0;
}
P2251 质量检测(分块线段树RMQ单调队列)的更多相关文章
- PKU 2823 Sliding Window(线段树||RMQ||单调队列)
题目大意:原题链接(定长区间求最值) 给定长为n的数组,求出每k个数之间的最小/大值. 解法一:线段树 segtree节点存储区间的最小/大值 Query_min(int p,int l,int r, ...
- ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)
Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...
- bzoj 1171 并查集优化顺序枚举 | 线段树套单调队列
详见vfleaking在discuss里的题解. 收获: 当我们要顺序枚举一个序列,并且跳过某些元素,那么我们可以用并查集将要跳过的元素合并到一起,这样当一长串元素需要跳过时,可以O(1)跳过. 暴力 ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- POJ 2823 线段树 Or 单调队列
时限12s! 所以我用了线段树的黑暗做法,其实正解是用单调队列来做的. //By SiriusRen #include <cstdio> #include <cstring> ...
- 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】
题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...
- Luogu4085 [USACO17DEC]Haybale Feast (线段树,单调队列)
\(10^18\)是要long long的. \(nlogn\)单调队列上维护\(logn\)线段树. #include <iostream> #include <cstdio> ...
- HDU 1754 I Hate It 线段树RMQ
I Hate It Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=175 ...
- 《白书》上线段树RMQ的实现
白书上的线段树RMQ实现,自己重写了一遍: #include <bits/stdc++.h> using namespace std; const int MAXN=1<<17 ...
- [HNOI/AHOI2018]转盘(线段树优化单调)
gugu bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...
随机推荐
- 开源项目01--WTM
一.项目名称:WTM 项目所用技术栈: wtm mvvm mvc aspnetcore dotnetcore react vue layui layui-admin element-ui ncc等 项 ...
- 小白学k8s(1)二进制部署k8s
二进制部署k8s 前言 准备工作 关闭防火墙 关闭 swap 分区 关闭 SELinux 更新系统时间 秘钥免密码 设置主机名称 服务器角色 安装etcd 创建证书 生成证书 部署Etcd 在Node ...
- 3.6 Windows驱动开发:内核进程汇编与反汇编
在笔者上一篇文章<内核MDL读写进程内存>简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功 ...
- DjangoURL反向解析
#添加书籍 url(r'^add_book/', views.add_book,name='abook'), #name='abook' 别名 # 删除书籍 url(r'^delete_book/(\ ...
- 4599元 铭凡推出NAG6迷你主机:12代i9+RX 6600M
铭凡推出了新款迷你主机NAG6,首发价4599元. 据了解,新款迷你主机的处理器采用的是i9-12900H,14核心20线程.24MBL3缓存,最高睿频达5.0GHz. 不仅如此,新款迷你主机内置RX ...
- 心动了!iPhone 15 Pro超窄边框感受下:1.5mm破历史纪录 “跑马框”再见
综合目前已知爆料来看,iPhone 15系列将有7大升级.其中一个比较明显的直观变化是,新款iPhone全系边框都会更窄.iPhone 15 Pro.Pro Max的边框宽度仅为1.55mm,破历史记 ...
- CommentTest
public class CommentTest{ /* 这是多行注释 可以声明多行注释的信息 1. Java注释的种类: 单行注释,多行注释,文档注释(Java特有) 2. 单行注释,多行注释 ① ...
- FreeSWITCH在session上执行特定dialplan
操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 日常开发中,会遇到需要在已存在的session上执行特定拨号方案的情况,今天整理下这方面的内容,我将从以下几个方面进 ...
- NEMU PA 4 实验报告
一.实验目的 在前面的PA123中,我们分别实现了基本的运算单元,实现了各种指令和程序的装载,实现了存储器的层次结构.而在PA4中,为了让NEMU可以处理异常情况以及和外设交互,我们要做的事情有以下: ...
- Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货 Sora是一个以视频生成为核心的多能力模型,具备以下能力: 文/图生成视频 视频生成视频 1分钟超长高质量视频生成 视频裂变多视 ...