当前位置: 首页 > news >正文

King of Range 2024牛客国庆集训派对day3

原题

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();}
}


http://www.mrgr.cn/news/42225.html

相关文章:

  • SQL学习3
  • Prompt 初级版:构建高效对话的基础指南
  • 计算机毕业设计 基于Python的个性化旅游线路推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • MySQL 中的 GTID 复制详解
  • JAVA-异常(通俗易懂)
  • Elasticsearch——数据聚合、数据同步与集群搭建
  • C#类的概念
  • 通过栈实现字符串中查找是否有指定字符串的存在
  • mybatis如何与spring的结合
  • 【西门子V20变频器】 变频器运行时报A922报警
  • 15分钟学 Python 第34天 :小项目-个人博客网站
  • (十八)、登陆 k8s 的 kubernetes-dashboard 更多可视化工具
  • MySQL 中的 LAST_INSERT_ID()函数详解
  • MethodChanel的使用方法
  • Linux 应用层协议HTTP
  • Chapter04
  • python-数据容器
  • 【AI知识点】近似最近邻搜索(ANN, Approximate Nearest Neighbor Search)
  • Gazebo安装,ubuntu22
  • 卫生间门口墙皮天天掉,是墙面“返潮”造成的?