P2251 质量检测
题目大意
给定长度为
样例
输入
10 4 16 5 6 9 5 13 14 20 8 12
输出
5 5 5 5 5 8 8
解决方法
发现题目是要获取每个区间内最小值,于是想到 ST表,板子稍作修改即可。
代码
#include <bits/stdc++.h> using namespace std; int n, m; int a[100010], ST[100010][22], lg[100010]; int main() { cin >> n >> m; lg[0] = -1; for (int i = 1; i <= n; i++) { cin >> a[i]; lg[i] = lg[i / 2] + 1; } for (int i = 0; i <= n; i++) { ST[i][0] = a[i]; //cout << ST[i][0] << endl; } for (int j = 1; j <= 17; j++) { for (int i = 1; i + (1 << j) - 1 <= n; i++) { ST[i][j] = min(ST[i][j - 1], ST[i + (1 << (j - 1))][j - 1]); } } int l = 1, r = m; while (l <= n - m + 1 && r <= n) { int t = lg[r - l + 1]; cout << min(ST[l][t], ST[r - (1 << t) + 1][t]) << endl; l++, r++; } return 0; }
本文作者:Cai-Ges
本文链接:https://www.cnblogs.com/Cai-Ges/p/18508090
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步