牛客小白月赛111 E 构造矩形
E 构造矩形
原题链接:https://ac.nowcoder.com/acm/contest/102742/E
思路:
这种询问方案数或者“价值”的题,通常解法要么是维护前缀信息用公式递推求解,要么是正难则反先得到全局再减去不合法的情况。在这里显然是属于前者,那么就可以分情况考虑,不妨固定 \(i\) 处 \(ai\) ,取在 \(ai\) 上的边长为 \(t\),考虑前缀位置 \(j\) 处的 \(aj\) 对答案的贡献。
共有两种情况:
(1). \(ai-aj-t=k\),即以 \(ai-aj\) 为长,所以有:\(t=ai-aj-k\) 且 \(1≤t≤m\),所以能够对答案产生贡献的 \(aj\) 要满足:\(ai-k-m≤aj≤ai-k-1\)。并且注意到,对于固定的 \(t\) 那么 \(aj\) 也是固定的,并且方案数为:\(m-t+1\),所以对于固定的 \(aj\),对方案的贡献为:\(m+aj+k+1-ai\)。在 \(i\) 处对答案的贡献即为:\(\sum{(aj)} + cnt(aj)*(m+k+1-ai)\)。
(2). \(t-(ai-aj)=k\),即以 \(ai-aj\) 为宽,所以有:\(t=ai-aj+k\) 且 \(k<t≤m\),所以能对答案产生贡献的 \(aj\) 要满足:\(ai+k-m≤aj<ai\)。与上面同理:当 \(t\) 固定时,\(aj\) 也固定,并且方案数为:\(m-t+1\),所以对于固定的 \(aj\),对方案的贡献为:\(m+aj+1-ai-k\)。在 \(i\) 处对答案的贡献即为:\(\sum{(aj)} + cnt(aj)*(m+1-ai-k)\)。
最终类似滑动窗口用三个队列维护一下前缀,及其队列中相应位置处 \(aj\) 的总和即可,其余的值均为已知并且 \(cnt\) 值即为队列中位置的个数。
时间复杂度:\(O(n)\)
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll n,m,k;
ll a[N];
int main(){
cin.tie(0)->sync_with_stdio(false);
cin>>n>>m>>k;
for(int i=1;i<=n;i++) cin>>a[i];
queue<int> q1,q2;
ll sq=0;
queue<int> p;
ll sp=0;
ll ans=0;
for(int i=1;i<=n;i++){
while(!q1.empty()){
auto j=q1.front();
if(a[j]>=a[i]-m-k) break;
sq-=a[j];
q1.pop();
}
while(!q2.empty()){
auto j=q2.front();
if(a[j]>a[i]-k-1) break;
sq+=a[j];
q1.push(j);
q2.pop();
}
while(!p.empty()){
auto j=p.front();
if(a[j]>=a[i]+k-m) break;
sp-=a[j];
p.pop();
}
ans+=sq+(ll)q1.size()*((ll)m+k+1-a[i]);
ans+=sp+(ll)p.size()*((ll)m+1-k-a[i]);
q2.push(i);
p.push(i);
sp+=a[i];
}
cout<<ans;
}
牛客小白月赛111 E 构造矩形的更多相关文章
- 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花
求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...
- 【牛客小白月赛21】NC201605 Bits
[牛客小白月赛21]NC201605 Bits 题目链接 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出3根柱子,最开始时n个盘子按照大小被置于最左的柱子. 如果盘子数 ...
- 牛客小白月赛65ABCD(E)
比赛链接:牛客小白月赛65_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) A:牛牛去购物 题意 ...
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...
- 牛客小白月赛8 - E - 诡异数字 数位DP
牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...
- 牛客小白月赛18 Forsaken给学生分组
牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 Forsaken有 ...
- 牛客小白月赛18 Forsaken喜欢数论
牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...
- 牛客小白月赛19 E 「火」烈火燎原 (思维,树)
牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...
- 【牛客小白月赛21】NC201604 Audio
[牛客小白月赛21]NC201604 Audio 题目链接 题目大意: 给出三点 ,求到三点距离相等的点 的坐标. 解析 考点:计算几何基础. 初中蒟蒻表示不会什么法向量.高斯消元..qwq 方法一: ...
- 牛客小白月赛16 小石的妹子 二分 or 线段树
牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想 ...
随机推荐
- 史陶比尔Stabli机器人维修小细节
在工业自动化领域,史陶比尔机器人以其卓越的性能和可靠性而著称.然而,即使是尖端的设备,也难免会遇到Stabli机械手故障和问题.对于机器人维护和修理,每一个小细节都显得至关重要. 一.观察 首先,我们 ...
- vue+elementUI当渲染文本超出一定字数时显示省略号
如图,当渲染的文字超出30字后显示省略号 1.设置过滤器 filters: { ellipsis(value) { if (!value) return ""; if (value ...
- Feedalyze - 让你听得见、听得清用户的反馈
满足用户需求,解决用户问题,获得适当报酬是商业成功最为重要的因素.然而扪心自问,当您推出新产品后,您真的在听.听得见.听得清用户的反馈么? 当今信息传播迅猛,渠道繁多,优秀产品随口碑效应供不应求,劣质 ...
- git码云安装及使用菜鸟教程
1.下载Windows本地码云 https://mirrors.huaweicloud.com/git-for-windows/(华为镜像下载),选择合适的版本下载,此处下载速度要快些 2.登录码云官 ...
- 详解vue-router基本使用
来源:https://m.jb51.net/article/111499.htm 本篇文章主要介绍了详解vue-router基本使用,详细的介绍了vue-router的概念和用法,有兴趣的可以了解 ...
- 使用 Trae 辅助开发一个网页文本高亮插件
项目概述 本插件是一个用于在网页上高亮显示选中文本的工具,支持多种颜色选择.高亮复制和删除等功能.插件基于 Edge 扩展测试开发. 目前只大致开发了内容交互脚本和插件弹出页,后台管理页暂未开发. 项 ...
- verilator书写C++版模块testbench
默认顶层模型名称为top,环境名称为contextp const std::unique_ptr<VerilatedContext> contextp{new VerilatedConte ...
- 使用makefile帮助GO项目开发
使用makefile可以快捷管理和构建自己的go项目, 适用于linux远程开发等环境. 提供一个基础的makefile供开发使用. 大部分是针对常用指令的二次封装 Makefile 先展示文件内容, ...
- 记录一下 简单udp和sni 代理 done
由于之前借鉴 Kestrel 了非常多抽象和优化实现,对于后续的扩展非常便利, 实现 简单udp和sni 代理 两个功能比预期快了超多(当然也有偷懒因素) (PS 大家有空的话,能否在 GitHub ...
- Python数据格式转换神器-提高办公效率
一.引言 在工作日常里,数据转换总是让人头疼?别急,今天揭秘一个超级实用的Python技巧,帮你轻松搞定各种数据格式转换,提升工作效率不是梦! 场景1:你手头有一堆CSV格式的(逗号分隔符)数据,其他 ...