题解: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数组来存储每 ...
随机推荐
- 【2024.09.27】NOIP2024 赛前集训-刷题训练(3)
[2024.09.27]NOIP2024 赛前集训-刷题训练(3) NOIP2018 提高组 铺设道路 算法一:模拟正常人铺路的过程,每次找区间的最小值,最小值就是本次填的高度,由于出现了若干个0位置 ...
- 【CoCollider】让系统和应用适配如此简单
在各平台应用开发过程中,随着业务的功能增加,不免会涉及到非公开的API依赖,针对某些应用或厂商系统的适配,每个版本都需要投入精力去排查,CoCollider 可以让我们的适配效率从几个星期提升到几小时 ...
- @Transactional事务,太坑了吧!
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据 ...
- Windows Terminal中使用GitBash
简要说明 我喜欢终端操作,喜欢Git,Microsoft出了一款工具叫做Windows Terminal,在Windows Terminal中使用Git的体验感是极佳的,本博客将教你如何让这体验舒服到 ...
- golang之http请求库go-resty
github: https://github.com/go-resty/resty go-resty 特性# go-resty 有很多特性: 发起 GET, POST, PUT, DELETE, HE ...
- 水位波纹动画兼容ie8
效果观看请到下方: 链接:https://pan.baidu.com/s/1AWHz0BHTmj_7Vx6qhSmuaA 提取码:ih9p 复制这段内容后打开百度网盘手机App,操作更方便哦 下面介绍 ...
- Nuxt.js 应用中的 dev:ssr-logs 事件钩子
title: Nuxt.js 应用中的 dev:ssr-logs 事件钩子 date: 2024/11/28 updated: 2024/11/28 author: cmdragon excerpt: ...
- HTML5 A链接
1.基本使用 a标签常用属性: 属性名 说明 href 规定链接的目标 URL target 已什么形式打开这个连接 target属性有以下几个值 属性名 说明 _self 默认,当前页面跳转 _bl ...
- 全网最适合入门的面向对象编程教程:60 Python面向对象综合实例-传感器数据实时绘图器
全网最适合入门的面向对象编程教程:60 Python 面向对象综合实例-传感器数据实时绘图器 摘要: 本文将结合之前内容实现模拟一个传感器系统软件,包括三个线程:传感器线程生成数据并通过串口发送给主机 ...
- 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常
有同事反映,在Pro中新建要素类时,没办法设定名称为"新建",会自己变成不完整的拼音. 查看了一下,确有此事. 在相同的界面里还有其他输入框,却没有这种情况. 研究了一下,发现是输 ...