您的位置:首页 > 房产 > 建筑 > 山东聊城疫情最新消息_前端如何优化seo_百度如何推广网站_大数据推广公司

山东聊城疫情最新消息_前端如何优化seo_百度如何推广网站_大数据推广公司

2024/12/21 19:38:49 来源:https://blog.csdn.net/2301_81278039/article/details/142697502  浏览:    关键词:山东聊城疫情最新消息_前端如何优化seo_百度如何推广网站_大数据推广公司
山东聊城疫情最新消息_前端如何优化seo_百度如何推广网站_大数据推广公司

原题

King of Range

解析

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[qmx.front()] - a[i] > k){l = max(l, qmx.front());qmx.pop_front();}while (!qmi.empty() && a[i] - a[qmi.front()] > k){l = max(l, qmi.front());qmi.pop_front();}ans += l;while (!qmx.empty() && a[qmx.back()] <= a[i]){qmx.pop_back();}qmx.push_back(i);while (!qmi.empty() && a[qmi.back()] >= a[i]){qmi.pop_back();}qmi.push_back(i);}cout << ans << "\n";
}
void solve()
{cin >> n >> m;for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= m; i ++ ){cin >> k;solve2();}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;while (T -- ){solve();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com