【ybt金牌导航1-3-4】【luogu P4392】音量问题 / Sound 静音问题
导航 Luogu ybt 金牌 音量 问题
2023-09-27 14:28:27 时间
音量问题 / Sound 静音问题
题目链接:ybt金牌导航1-3-4 / luogu P4392
题目大意
给你一些数,然后问你有多少个长度为 m 的区间满足区间最大减区间最小小于等于一个给定的值。
输出所有满足条件的区间的起始位置,如果没有满足的就输出 NONE。
思路
看到题目一开始想到了类似线段树 / 树状数组的东西,不过发现如果是 1 0 7 10^7 107 的数据过不了。
然后就想到把它分解成求最大和求最小,然后你会发现它求的区间长度相同。
那就变成了滑动窗口,然后就单调队列做就可以了。
代码
#include<cstdio>
using namespace std;
int n, m, c, a[10000001], head;
int maxn[10000001], minn[10000001];
int sta[10000001], num[10000001];
bool yes;
int read() {//由于读入量有点大用个快读(不知道不用会不会超时)
char c = getchar();
int re = 0, zf = 1;
while (c < '0' || c > '9') {
zf = -zf;
c = getchar();
}
while (c >= '0' && c <= '9') {
re = (re << 3) + (re << 1) + c - '0';
c = getchar();
}
return re * zf;
}
int main() {
n = read();
m = read();
c = read();
for (int i = 1; i <= n; i++) a[i] = read();
head = 1;
for (int i = 1; i <= n; i++) {//单调队列求区间最大
while (sta[0] >= head && a[i] >= sta[sta[0]]) sta[0]--;
sta[++sta[0]] = a[i];
num[sta[0]] = i;
if (i >= m) {
maxn[i - m + 1] = sta[head];
if (num[head] == i - m + 1) head++;
}
}
head = 1;
sta[0] = 0;
for (int i = 1; i <= n; i++) {//单调队列求区间最小
while (sta[0] >= head && a[i] <= sta[sta[0]]) sta[0]--;
sta[++sta[0]] = a[i];
num[sta[0]] = i;
if (i >= m) {
minn[i - m + 1] = sta[head];
if (num[head] == i - m + 1) head++;
}
}
for (int i = 1; i + m - 1 <= n; i++)
if (maxn[i] - minn[i] <= c) {
yes = 1;
printf("%d\n", i);
}
if (!yes) printf("NONE");
return 0;
}
相关文章
- 【ybt金牌导航4-6-2】【luogu P3835】可持久化平衡树
- 【ybt金牌导航8-3-1】【luogu P4781】函数求值 / 【模板】拉格朗日插值
- 【ybt金牌导航4-3-2】【luogu P3391】【模板】文艺平衡树
- 【ybt金牌导航4-6-1】【luogu P3834】【模板】区间第k小 / 可持久化线段树 2(主席树)
- 【ybt金牌导航6-4-4】【luogu P1494】小明选袜子 / 小Z的袜子(莫队)
- 【ybt金牌导航6-3-3】【luogu P4135】偶数个数 / 作诗(分块)
- 【ybt金牌导航6-3-1】【luogu P4168】区间众数 / 蒲公英 / 分块例题
- 【ybt金牌导航8-1-4】【luogu P4151】路径最大异或和 / 最大XOR和路径
- 【ybt金牌导航1-1-3】【ybt高效进阶6-6-2】【luogu P1365】期望收益 / WJMZBMR打osu!/Easy
- 【ybt金牌导航5-3-2】【luogu P2495】消耗战
- 【ybt金牌导航2-3-3】【luogu P3975】K小子串 / 弦论
- 【ybt金牌导航1-5-3】【luogu P5785】任务安排3 / 任务安排
- 【ybt金牌导航6-5-2】【luogu P5227】判连通图 / 连通图(CDQ分治)(并查集)
- 【ybt金牌导航3-6-6】【luogu P4171】满汉全席
- 【ybt金牌导航3-1-1】【POJ 3041】【luogu P7368】消除格子 / Asteroids G
- 【ybt金牌导航5-4-2】【luogu P3203】弹飞绵羊
- 【ybt金牌导航4-6-1】【luogu P3834】【模板】区间第k小 / 可持久化线段树 2(主席树)
- 【ybt金牌导航4-6-3】【luogu P3919】【模板】可持久化线段树 1(可持久化数组)
- 【ybt金牌导航5-1-2】【luogu P2146】软件管理 / 软件包管理器
- 【luogu P4036】【ybt金牌导航4-5-3】火星人
- 【ybt金牌导航4-3-5】【luogu P3369】普通平衡树(Splay 做法)
- 【ybt金牌导航3-2-4】【luogu P5038】奇怪游戏 / 奇怪的游戏
- 【ybt金牌导航3-3-3】【luogu P1646】幸福值 / happiness
- 【ybt金牌导航3-1-5】【luogu UVA663】【POJ 1486】幻灯片 / Sorting Slides