【2021牛客暑期多校训练营5】K King of Range(单调队列)
K King of Range
题意:
- 给出一个长为n的序列,m次操作,每次操作求对于一个指定的k,原序列存在多少个连续子序列,满足该区间内最大值减最小值严格大于k。
思路:
- 令 Ri 为 l=i 时,满足极差大于 k 的最小的 r,如果不存在则记 Ri = n+1。那么显然有 R1 ≤ R2 ≤ … ≤ Rn。
- 首先可以用 Set 之类的 STL 工具来快速维护极差,所以可以在均摊 O(log n) 的时间求 Ri。
- 一个线性的做法:注意到因为区间端点都是单调的,所以可以维护两个单调队列,其中一个递增序列,队首维护最小值,一个递减序列,队首维护最大值,每次弹出两个队列中队首靠前的一个,直到极差 ≤ k。那么就可以在均摊 O(1) 的时间内求 Ri 了。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
LL a[maxn];
int main(){LL n, m; cin>>n>>m;for(int i = 1; i <= n; i++)cin>>a[i];while(m--){LL k; cin>>k;deque<LL>ma, mi; //维护区间[l,i]的最大值和最小值,按顺序入队LL ans = 0, l = 1; //ans维护极差≤k的区间个数for(LL i = 1; i <= n; i++){while(ma.size()&&a[ma.back()]<a[i])ma.pop_back();//递减序列,队首维护最大值ma.push_back(i);while(mi.size()&&a[mi.back()]>a[i])mi.pop_back();//递增序列,队首维护最小值mi.push_back(i);while(mi.size()&&ma.size()&&a[ma.front()]-a[mi.front()]>k){if(ma.front()==l)ma.pop_front();if(mi.front()==l)mi.pop_front();l++;}ans += i-l+1;//如果a[l..i]满足条件,其(i-l+1)个子数组都满足条件}cout<<n*(n+1)/2-ans<<"\n";}return 0;
}
【2021牛客暑期多校训练营5】K King of Range(单调队列)相关推荐
- 2021牛客暑期多校训练营2 K Stack
题目大意: 题目告诉你利用单调栈几个点前面比它小并包含它自身的元素有多少个 让你构造一个包含1到n并每个数字只出现一次的序列 思路: 我们可以对于每个点都算出栈中元素的数量 对于没有给出的点的栈中元素 ...
- 2021牛客暑期多校训练营9
2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...
- 2021牛客暑期多校训练营5
2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...
- 2021牛客暑期多校训练营4
2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...
- 2021牛客暑期多校训练营3
2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...
- 2021牛客暑期多校训练营2
2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...
- 2021牛客暑期多校训练营1
2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...
- 2021牛客暑期多校训练营2,签到题CDFKI
2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...
- 2021牛客暑期多校训练营1, 签到题DFBG
2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...
- 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5
题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...
最新文章
- 王思聪语录 - CV版
- 多项式乘法 FFT模板
- kprobe原理解析
- 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用...
- 过程日志定位疑难问题
- 获取北京时间授时api stm32 esp8266获取北京时间、年月日、星期api GMT格林威时间转换北京时间
- JDK、J2EE、J2SE、J2ME的区别(转-2021-04-30)
- 【软件工程导论题型大总结】画图题总结
- 知识问答题小程序头脑王者源码
- Win10 提示账户名与安全标识间无任何映射完成
- 微软大战Google Earth的利器-虚拟3D地球“Virtual Earth3D”!
- 程序员必备狂拽炫酷吊炸天的动效神器
- 小红书笔记怎么写提高转化率
- Pytorch创建模型-小试牛刀
- Linux查看硬盘属性(机械硬盘/固态硬盘)
- 最近工作里遇到的一些问题,记录下来
- ubuntu安装mysql-python报错
- Flutter3引用原生播放器-Android篇
- STM8开发实例-I2C
- LPC1788 emWin应用笔记
热门文章
- 三角数数列与杨辉三角
- 机器学习算法的调试 —— 梯度检验(Gradient Checking)
- 也谈压缩感知(compressive sensing)
- 传递给 left 或 substring 函数的长度参数无效_MySQL:函数入门实例
- python调用sqlldr_加载非常大的日志文件时出现Oracle SQL加载程序错误
- python里w_python vs pythonw | 学步园
- python画简便的图-python的pyecharts绘制各种图表详细(附代码)
- python画动态图-利用Python如何制作好玩的GIF动图详解
- python自学行吗-python自学行吗 有哪些用处
- python自动化办公演示视频-Python自动化办公培训视频教程 百度云网盘