$Luogu$

$Sol$

乍一看就是个模拟叭,用个优先队列维护不就好了.不过这里有一个问题就是怎么解决没被切的蚯蚓的增长问题.可以这样处理,每次切一条蚯蚓,给切完之后的都减去$q$,最后输出答案时都加上$q*m$就$OK$辣.还有一个要注意的地方就是每次切蚯蚓的时候都要求出它的实际长度而不是存在优先队列里的长度.

但是这样只有$80$的样子.瞎分析一波复杂度似乎是$O(mlog_{n+m}^2)$.

考虑优化,如果能把这个$log^2$去掉就好了吖.

注意到,先被切的蚯蚓的较长的一段一定大于后被切的蚯蚓的较长的一段,先被切的蚯蚓的较短的一段一定大于后被切的较短的一段.于是不需要优先队列就可以维护单调性了.具体来说开三个数组,分别存还没被切的蚯蚓(初始数组,记得排序),被切了之后较长的那个蚯蚓,被切之后较短的蚯蚓.每次选取三个数组里最长的那个切,切完之后分别加入后面两个数组就好了不需要多余的维护.

$Code$

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int r()
{
int x=,y=;;char ch;
ch=getchar();
while(ch<''||ch>'') {if(ch=='-') y=-;ch=getchar();}
while(ch>=''&&ch<='') {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*y;
}
bool cmp(int x,int y)
{
return x>y;
}
int q[],q1[],q2[];
int n,m,qq,u,v,t;
double p;
int a[];
int rem;
priority_queue<int> ans;
int main()
{
n=r();m=r();qq=r();u=r();v=r();t=r();
p=(double)u/(double)v;
for(register int i=;i<=n;i++) q[i]=r();
sort(q+,q+n+,cmp);
int h=;
int h1=,t1=,h2=,t2=;
int top;
for(register int i=;i<=m;i++)
{
if(h>n) {if(q1[h1]>q2[h2]) top=q1[h1++];else top=q2[h2++];}
else if(q[h]>=q1[h1]&&q[h]>=q2[h2]) top=q[h++];
else if(q1[h1]>=q2[h2]) top=q1[h1++];
else top=q2[h2++];
top+=rem;
int x1=floor((double)top*p),x2=top-x1;
rem+=qq;
x1-=rem;x2-=rem;
q1[++t1]=x1;q2[++t2]=x2;
if(i%t==) printf("%d ",top);
}
printf("\n");
for(register int i=h;i<=n;i++) ans.push(q[i]);
for(register int i=h1;i<=t1;i++) ans.push(q1[i]);
for(register int i=h2;i<=t2;i++) ans.push(q2[i]);
for(int i=;ans.size();i++)
{
if(i%t==) printf("%d ",ans.top()+rem);
ans.pop();
}
return ;
}

View 去年的 Code

随机推荐

  1. Oracle函数——TO_DATE

    TO_DATE 含义:将具有固定格式的字符串类型的数据转化为相对应的Date类型数据,官网解释如下图   使用方法 TO_DATE("需要转换的字符串","日期格式&qu ...

  2. oracle函数 INTERVAL c1 set1

    [功能]:变动日期时间数值 [参数]:c1为数字字符串或日期时间字符串,set1为日期参数 [参数表]:set1具体参照示例 [返回]:日期时间格式的数值,前面多个+号 以天或天更小单位时可用数值表达 ...

  3. EL表达式中的empty和null

    EL表达式中的empty和null 先说一下EL表达式中的null和empty区别,然后再说说最近在项目中出现的一个有趣的问题. EL中的null和empty都可用来判断值是否为空,但两者存在略微的区 ...

  4. git之本地仓库关联远程仓库

    首先新建一个github respository 然后在自己本地新建一个maven项目,里面写点东西 如下图,将自己的项目所在地设置为本地git仓库 将本地仓库与远程关联,首先获取远程仓库的地址,点击 ...

  5. H3C 配置二层ACL

  6. [WC2013]平面图——平面图点定位

    [WC2013]平面图 码农题 平面图点定位: 1.平面图转对偶图:[HNOI2016]矿区 2.扫描线点定位 把所有的顶点和询问点排序,扫描线 每个边在fr的位置加入,to的位置删除,竖直直线不要 ...

  7. MySQL 数据库中如何把A表的数据插入到B表?

    web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码 ...

  8. H5 canvas 绘图

    H5的canvas绘图技术   canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制 ...

  9. 【mac】Mac 终端如何切换成管理员用户

    方法1.打开终端输入 sudo su  然后回车 Password:  ------(输入root密码即可) sh-3.2# --------    (输入执行的命令即可,例如 npm i -g np ...

  10. P1032 队列的序列

    题目描述 现在告诉你有一个队列,一开始它是空的,首先你会把 1,2,3,-m 这 m 个数依次push入这个队列. 接着,会进行 n 次操作,每次操作你需要进行如下操作: 首先,获得队首元素,输出队首 ...