数字录音中,声音是用表示空气压力的数字序列描述的,序列中的每个值称为一个采样,每个采样之间间隔一定的
时间。 很多声音处理任务都需要将录到的声音分成由静音隔开的几段非静音段。为了避免分成过多或者过少的非
静音段,静音通常是这样定义的:m个采样的序列,该序列中采样的最大值和最小值之差不超过一个特定的阈值c。
请你写一个程序,检测n个采样中的静音。
标签:problem play false EDA min color online output 声音
#include <bits/stdc++.h> #define rg register int using namespace std; typedef long long ll; const ll mod = 1e9 + 7; const int maxn = 2e6 + 10; int n, m, c; int o[maxn]; int q1[maxn], q2[maxn], x_head, x_tail, n_head, n_tail; int res; int main() { #ifndef ONLINE_JUDGE freopen("splay.txt", "r", stdin); #endif scanf("%d%d%d", &n, &m, &c); x_head = 1, x_tail = 0; bool check = false; for (register int i = 1; i <= n; ++i) { scanf("%d", &o[i]); while (x_head <= x_tail && i - q1[x_head] + 1 > m)++x_head; while (n_head <= n_tail && i - q2[n_head] + 1 > m)++n_head; while (n_head <= n_tail && o[q2[n_tail]] >= o[i])--n_tail; q2[++n_tail] = i; while (x_head <= x_tail && o[q1[x_tail]] <= o[i])--x_tail; q1[++x_tail] = i; if (i - m + 1 >= 1 && o[q1[x_head]] - o[q2[n_head]] <= c) { ++res; printf("%d\n", i - m + 1); check = true; } } if (!check)puts("NONE"); return 0; }
标签:problem play false EDA min color online output 声音
原文地址:https://www.cnblogs.com/czy-power/p/11509704.html