牛客多校第五场 K King of Range
题意:
给定一个\(n\)个数得序列\(a_i\),给定\(m\)个询问,每次给出一个\(k\),寻找有多少个区间\([l, r]\)中最大值与最小值之差严格大于\(k\)。
思路:
可以发现,如果已经知道一个区间最大值与最小值严格大于k之后,那么我们便可以往从两头这个区间随意加数并且会对答案有贡献:
如果加一个比最大值大的或者比最小值小的数,那么这个区间差值还是严格大于\(k\);
如果加一个介于最大值最小值之间的数,那么这个区间差值不会发生变化。
那么发现这一点之后便可以使用双指针寻找区间了,那么怎么维护区间最值呢(比赛的时候想到了用双指针但没想到怎么维护最值),\(ST\)表就派上用场了,那么我们固定一个\(i\),让\(j\)去寻找即可,找到第一个合适的区间就可以停下了,那么j往后的所有数都可以加到这个区间中而对答案产生贡献就是\(n - j + 1\)。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5 + 10, M = 18;
int n, m, k;
int w[N];
int f1[N][M], f2[N][M];
int lg[N];
void init() {
for (int j = 0; j < M; j++) {
for (int i = 1; i + (1 << j) - 1 <= n; i++) {
if (!j) f1[i][j] = w[i], f2[i][j] = w[i];
else {
f1[i][j] = max(f1[i][j - 1], f1[i + (1 << j - 1)][j - 1]);
f2[i][j] = min(f2[i][j - 1], f2[i + (1 << j - 1)][j - 1]);
}
}
}
}
bool check(int l, int r, int k) {
int len = r - l + 1;
int d = lg[len];
int maxD = max(f1[l][d], f1[r - (1 << d) + 1][d]);
int minD = min(f2[l][d], f2[r - (1 << d) + 1][d]);
return maxD - minD > k;
}
int main() {
//ios::sync_with_stdio(false); cin.tie(0);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &w[i]);
lg[2] = 1;
for(int i=3;i<=n;i++) {
lg[i] = lg[i / 2] + 1;
}
init();
while (m--) {
long long res = 0;
int k; scanf("%d", &k);
for (int l = 1, r = 1; l <= n; l++) {
while (!check(l, r, k) && r <= n && l <= r) r++;
if (r <= n) res += n - r + 1;
}
printf("%lld\n", res);
}
return 0;
}
值得一提的是,用库函数\(log\)函数的效率有点不行,会被卡,所以还是乖乖预处理一个\(log\)数组吧。
牛客多校第五场 K King of Range的更多相关文章
- 2020牛客多校第八场K题
__int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...
- 牛客多校第五场-D-inv
链接:https://www.nowcoder.com/acm/contest/143/D来源:牛客网 题目描述 Kanade has an even number n and a permutati ...
- 牛客多校第五场 F take
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 题目描述 Kanade has n boxes , the i-th box has p[i] ...
- 牛客多校第五场 J:Plan
链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 Kanade has n boxes , the i-th box has p[i] proba ...
- 牛客多校第五场 E room 二分图匹配 KM算法模板
链接:https://www.nowcoder.com/acm/contest/143/E来源:牛客网 Nowcoder University has 4n students and n dormit ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解
https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...
- 2018牛客多校第五场 H.subseq
题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...
- 2018牛客多校第五场 E.room
题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...
随机推荐
- 不要再傻傻分不清 hash、 chunkhash 和 contenthash 啦
hash.contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件. 文件名不带哈希值 webpack.config.js 文件中,output 中定义输 ...
- [golang]使用mTLS双向加密认证http通信
前言 假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信.为了避免在公网进行 http 明文通信造成的信息泄露,nginx与客户端之间的通信应当使用 https 协议 ...
- go创建web项目分别在windows和linux部署
转载请注明出处: 要在Linux服务器上运行Go的Web项目,可以按照以下步骤进行操作: 在服务器上安装Go:首先,在Linux服务器上安装Go编程语言.你可以从官方网站(https://golang ...
- 一文详解TextBrewer
本文分享自华为云社区<TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术.提供便捷快速的知识蒸馏框架.提升模型的推理速度,减少内存占用>,作者:汀丶. TextBrewer ...
- Apache solr XML 实体注入漏洞(CVE-2017-12629)
描述: Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.原理大致是文档通过Http利用XML加到一个搜索集 ...
- SAP 传输请求释放及传输过程 SE10 STMS
T-CODE:SE10 STMS 1.传输请求释放 首先通过SE10打开传输组织器. 点击[显示],可以看到待释放的请求. 此时将可修改请求中的请求,点击进行展开,可以看到子请求号和请求属性. 选中请 ...
- 【故障公告】多年的故障老朋友又来了:数据库服务器 CPU 100%
数据库服务器 CPU 100% 问题几乎每年都要来几次,从来都不事先打一声招呼,今年的第2次在我们正忙着会员救园的时候来了. 今天 13:35 首先收到我们自己的异常告警通知: Execution T ...
- [Love] VSCODE 调试 LOVE 引擎游戏
VSCODE调试LOVE引擎游戏 安装插件 配置插件 按 CTRL + SHIFT + P,打开Preferences: Open User Settings (JSON),为settings.jso ...
- java与es8实战之四:SpringBoot应用中操作es8(无安全检查)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<java与es8实战>系 ...
- 全是中文的txt文件查找特定字符并输出该行到新文件
tangshi.txt文件为全为汉唐诗 在该文件中查找指定字符 codecs库为打开中文文件的库,详情自行知乎 tangshi.txt大概十几万行,需要该文件练手的同学下方评论 要点:更改文件字符编码 ...