洛谷P2827 蚯蚓(单调队列)
题意
初始时有$n$个蚯蚓,每个长度为$a[i]$
有$m$个时间,每个时间点找出长度最大的蚯蚓,把它切成两段,分别为$a[i] * p$和$a[i] - a[i] * p$,除这两段外其他的长度都加一个定值$q$。
每次询问被蚯蚓被切前的长度
Sol
用堆模拟可获得$50 - 85$不等的分数。
蚯蚓的长度有单调性。然后这题就做完了。。。
首先把$a[i]$排序
我们分别维护三个数组$a, b, c$,分别表示未被切的蚯蚓,被切成$p * a[i]$的蚯蚓和被切成$a[i] - p * a[i]$的蚯蚓
然后每次取出这三个里面最大的,切开之后再插回去就行了
大概口胡一下单调性的证明:
这题中最重要的两个条件是$a_i$有序以及$0 < p < 1$
首先$a_i$有单调性是显然的
考虑$b, c$中的元素一定是按照从小到大的顺序加入的,且不受全局标记的影响。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
const int MAXN = 1e7 + , INF = 1e9 + ;
using namespace std;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, M, All, T, u, v, a[MAXN], p;
queue<int> q[];
bool comp(const int &a, const int &b) {
return a > b;
}
int main() {
N = read(); M = read(); All = read(); u = read(); v = read(); T = read(); p = u / v;
for(int i = ; i <= N; i++) a[i] = read();
sort(a + , a + N + , comp);
for(int i = ; i <= N; i++) q[].push(a[i]);
int cur = ;
for(int i = ; i <= M; i++) {
//if(i == 5) {printf("%d ", q[2].front());}
int val = -INF, mx = ;
for(int j = ; j < ; j++)
if(!q[j].empty() && q[j].front() > val) mx = j, val = q[j].front(); int top = val; q[mx].pop();
if(!(i % T)) printf("%d ", val + cur); q[].push(1ll * (top + cur) * u / v - cur - All);
q[].push((top + cur) - 1ll * (top + cur) * u / v - cur - All); cur += All;
}
puts("");
priority_queue<int> ans;
for(int i = ; i <= N + M; i++) {
int val = -INF, mx = ;
for(int j = ; j < ; j++)
if(!q[j].empty() && q[j].front() > val) mx = j, val = q[j].front();
q[mx].pop();
if(!(i % T))
printf("%d ", val + cur);
} return ;
}
洛谷P2827 蚯蚓(单调队列)的更多相关文章
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷 P2827 蚯蚓 解题报告
P2827 蚯蚓 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 \(c\) 向下取整,例如:\(\lfloor 3.0 \rfloor = \lfloor 3.1 ...
- NOIP 2016 洛谷 P2827 蚯蚓 题解
题目传送门 展开 题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手 ...
- 洛谷 U4792 Acheing 单调队列
U4792 Acheing 5通过 43提交 题目提供者Acheing 标签 难度尚无评定 提交 最新讨论 暂时没有讨论 题目背景 题目并没有什么含义,只是想宣传一下自己的博客,Acheing.com ...
- 【洛谷】【单调队列】P2032 扫描
[题目描述:] 有一个 1 ∗ n 的矩阵,有 n 个正整数. 现在给你一个可以盖住连续的 k 的数的木板. 一开始木板盖住了矩阵的第 1 ∼ k 个数,每次将木板向右移动一个单位,直到右端与第 n ...
- 洛谷——P2827 蚯蚓
P2827 蚯蚓 题目描述 本题中,我们将用符号 \lfloor c \rfloor⌊c⌋ 表示对 cc 向下取整,例如:\lfloor 3.0 \rfloor = \lfloor 3.1 \rflo ...
- 洛谷p2827蚯蚓题解
题目 算法标签里的算法什么的都不会啊 什么二叉堆?? qbxt出去学习的时候讲的,一段时间之前做的,现在才写到博客上的 维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那 ...
- 洛谷 P2827 蚯蚓 题解
每日一题 day32 打卡 Analysis 我们可以想一下,对于每一秒除了被切的哪一个所有的蚯蚓都增长Q米,我们来维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那一部 ...
- 滑动窗口-洛谷T1866(单调队列)
咕咕咕 单调队列板子题 一.基本 1.单调队列: 特殊的双端队列,内部元素.分为最大队列(单调递增)和最小队列(单调递减)两种 二.应用 本题中:大部分单调队列优化的动态规划问题都和定长连续子区间的最 ...
随机推荐
- IntelliJ IDEA 2018 设置代码提示对大小写不敏感
setting->Editor->General->Code Completion取消勾选Match case
- C++日志之获取函数的名字,行号,文件名
在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名.行号.函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__ 先介绍几个编译器内置的宏定 ...
- GitHub的使用方法
版本控制系统 > Git 分布式 > Subversion 集中式 1. 安装git: # apt-get install git //root权限 $ sudo apt-get inst ...
- python虚拟环境管理包virtualenvwrapper
1.打开cmd 2.安装virtualenvwrapper pip install virtualenvwrapper-win 3.配置虚拟环境的位置 新建系统变量默认在c盘 4.新建虚拟环境 mkv ...
- Module:template
ylbtech-Module: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech. ...
- 利用Dockerfile文件创建带有sshd服务的centos镜像
利用Dockerfile文件创建带有sshd服务的centos镜像 标签:dockerfile 1.安装docker并启动docker,不在赘述 2.创建使用Dockerfile安装sshd服务的目录 ...
- sqlServer:convert()函数
在oracle中对于时间格式的转换用到的比较多,相对也比较了解,现在换了新的项目组,使用sqlserver数据库,需要对这个数据库的一些常用函数进行重新学习和熟悉,现在根据w3c及网上博文对conve ...
- Identity Server 4 原理和实战(完结)_----选看 OpenId Connect 简介
Identity Procider:身份提供商
- UVa 1660 Cable TV Network (最大流,最小割)
题意:求一个无向图的点连通度. 析:把每个点拆成两个,然后中间连接一个容量为1的边,然后固定一个源点,枚举每个汇点,最小割. 代码如下: #pragma comment(linker, "/ ...
- UVa 11520 Fill the Square (水题,暴力)
题意:给n*n的格子里填上A-Z的字符,保证相邻字符不同,并且字典序最小. 析:直接从第一个格子开始暴力即可,每次判断上下左是不是相同即可. 代码如下: #pragma comment(linker, ...