原题
解析
m 的值不大, 每次时间在 n logn 以内即可
我们遍历整个数组, 以 i 为右边界, 检测是否有满足条件的左边界, 一次只加上左面的所有可能, 用两个双向队列维护两个单调栈, 一个存最大值, 一个存最小值, 这样可以帮助找到合适的左边界
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 200010;
int n, m, k, q, l, ans;
int a[N];
void solve2()
{
deque<int> qmi, qmx;
l = 0, ans = 0;
for(int i = 1; i <= n; i ++ )
{
while (!qmx.empty() &&a