题解:CF727F Polycarp's problems
link。
贪心做法。
本题贪心做法的实质就是用整数尽量多地抵消该整数后面的负数。
如果正着做,没有办法考虑全该数后面的所有负数,所以倒着做。
例如当前遍历到了 \(50\),此时序列如下:
\]
易得我们 \(50\) 应该抵消的是 \(-10,-20\),而不是前面的 \(-50\),因为我们要使删除的数越少越好。
但是剩下的 \(50 - 10 - 20 = 20\) 也不能空着,抵消一部分的剩下的 \(-50\) 即可。
最终得到:
\]
发现上述操作可以用堆来维护,具体维护方法见代码。
- 时间复杂度:\(\mathcal O ((n + m) \log _ n)\),瓶颈在于堆和二分。
- 空间复杂度:略。
代码:
// 加强版:n,m <= 1000000 代码
#include <bits/stdc++.h>
#define int long long
#define pii pair<int, int>
using namespace std;
const int N = 1e6 + 5;
int n, m, a[N], b[N], tot;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
priority_queue<int> q;
for (int i = n; i >= 1; i--) {
if (a[i] < 0) {
q.push(a[i]);
} else {
while (q.size() && a[i] >= 0) {
a[i] += q.top();
q.pop();
}
if (a[i] < 0) {
q.push(a[i]);
}
}
}
while (q.size()) {
b[++tot] = -q.top();
q.pop();
}
for (int i = 1; i <= tot; i++) {
b[i] += b[i - 1];
}
for (int i = 1; i <= m; i++) {
int x;
cin >> x;
if (x >= b[tot]) {
cout << "0\n";
continue;
}
int t = upper_bound(b + 1, b + tot, x) - b - 1;
cout << tot - t << "\n";
}
return 0;
}
题解:CF727F Polycarp's problems的更多相关文章
- CF727F [Polycarp's problems] & [EX_Polycarp's problems]
原题题意 给出长度为n的有序数组,m次询问,每次给出一个正整数x.你要删除数组中最少的元素,使得数组中的前缀和+x都为非负整数.允许离线,n≤750,m≤200,000. 原题思路 首先注意到,x能成 ...
- Polycarp's problems
Polycarp's problems time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- codeforces 727F. Polycarp's problems
题目链接:http://codeforces.com/contest/727/problem/F 题目大意:有n个问题,每个问题有一个价值ai,一开始的心情值为q,每当读到一个问题时,心情值将会加上该 ...
- Codeforces 727 F. Polycarp's problems
Description 有一个长度为 \(n\) 有正负权值的序列,你一开始有一个值,每次到一个权值就加上,最少需要删掉多少数值才能到序列末尾.\(n \leqslant 750,m \leqslan ...
- 2019年7月22日 - LeetCode0004
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/submissions/ 我的解法: 我看到了那个log的要求,也第一时间想到 ...
- 2019年7月20日 - LeetCode0003
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/ 我的解法: c ...
- 【LeetCode 10】正则表达式匹配
题目链接 [题解] 看到这个题解 写的代码. 就是加个备忘录法.优化一下暴力的做法. 匹配的时候如果遇到号的话,就两种可能.不再考虑它前面一个字符了. 跳过这个或者.或者继续用前面那个字符匹配. 即d ...
- 素数筛 : Eratosthenes 筛法, 线性筛法
这是两种简单的素数筛法, 好不容易理解了以后写篇博客加深下记忆 首先, 这两种算法用于解决的问题是 : 求小于n的所有素数 ( 个数 ) 比如 这道题 在不了解这两个素数筛算法的同学, 可能会这么写一 ...
- 15 道超经典大厂 Java 面试题!重中之重
从超高频的后端面试题出发,指明学习方向 大家好,我是鱼皮. 还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中. 他整个大一期间基本都在学习前端.后来,我带他写了一次后端,结果就崩 ...
- LeetCode题目答案及理解汇总(持续更新)
面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每 ...
随机推荐
- [rCore学习笔记 031] SV39多级页表的硬件机制
看到这个题目就知道上一节提到的RISC-V手册的10.6节又有用武之地了. 这里只需注意,RV32 的分页方案Sv32支持4GiB的虚址空间,RV64 支持多种分页方案,但我们只介绍最受欢迎的一种,S ...
- Hugging Face国内镜像站:告别Hugging Face模型下载难题
Hugging Face国内镜像站: https://hf-mirror.com/
- .NET 9 发布 性能提升、AI 支持与全方位改进
前言 .NET 9 正式发布,这是迄今为止最高效.现代.安全.智能且高性能的 .NET 版本. 新版本凝聚了全球数千名开发者的共同努力,包含了数千项性能.安全性和功能性改进. 主要亮点 性能提升:全面 ...
- springboot将文件处理成压缩文件
前言 在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理:为了让大家进一步了解我先将springboot处理的方法总结如下,有不到之处敬请大家批评指正! 一.文件准备: ht ...
- Ymodem协议详解
Xmodem.Ymodem和Zmodem协议是最常用的三种通信协议. Xmodem协议是最早的,传输128字节信息块. Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点.它可以一次传输1 ...
- JAVA 使用注解lombok@Builder和@Data,primary not found default constructor
由于添加@Builder会将@Data让类缺失无参构造器 应手动在实体中写构造函数并增加: @Tolerate 实体类名(){} 网上很多讲解 这里给一个我觉得讲的比较好的链接 https://www ...
- 低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据
伙伴们,今天我们来学习合宙低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据. 一.编写脚本 1.1 准备资料 780E开发板购买链接 780E开发板设计资料 LuatOS-Air7 ...
- 『玩转Streamlit』--图像与媒体组件
Streamlit中的图像与媒体组件,主要是st.image.st.audio和st.video. 它们是专为在Streamlit Web应用程序中嵌入和展示多媒体内容而设计的,这些组件不仅丰富了应用 ...
- Wgpu图文详解(03)缓冲区Buffer
在上一篇文章中,我们介绍了Wgpu中的渲染管线与着色器的概念以及基本用法.相信读者还记得,我们在渲染一个三角形的时候,使用了三角形的三个顶点的索引作为了顶点着色器的输入,并根据索引值计算了三个几何顶点 ...
- .NET Core 线程池(ThreadPool)底层原理浅谈
简介 上文提到,创建线程在操作系统层面有4大无法避免的开销.因此复用线程明显是一个更优的策略,切降低了使用线程的门槛,提高程序员的下限. .NET Core线程池日新月异,不同版本实现都有差别,在.N ...