题目贼长

大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q<200)。问m秒后的n+m条线段的长度(1≤n≤100000,1<=m<=7000000)

题解

乍一看是堆,可是堆被卡了。

我们建三个队列分别装最初的线段,和被切出来的两种线段。可以发现任何时候,一个队列里的线段长度单调递减,最长的线段,就从这三个队列里取出第一个比较就行。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
long long n,m,q,u,v,t,z[N],qu1[N],qu2[N],qu3[N],h1,h2,h3,t1,t2,t3,cnt2[N],cnt3[N];
bool cmp(long long x,long long y){
return x>y;
}
int main(){
scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);
for(long long i=;i<=n;i++){
scanf("%lld",&z[i]);
}
sort(z+,z++n,cmp);
for(long long i=;i<=n;i++){
qu1[++t1]=z[i];
}
h1=h2=h3=;
for(long long i=;i<=m;i++){
long long a=qu1[h1]+(i-)*q;
if(h1>t1)a=;
long long b=qu2[h2]+(i-cnt2[h2]-)*q;
if(h2>t2)b=;
long long c=qu3[h3]+(i-cnt3[h3]-)*q;
if(h3>t3)c=;
long long d=max(a,max(b,c));
if(d==a)h1++;
else if(d==b)h2++;
else h3++;
long long e=(long long)d*u/v;
long long f=d-e;
qu2[++t2]=e;
qu3[++t3]=f;
cnt2[t2]=cnt3[t3]=i;
if(i%t==)printf("%lld ",d);
}
printf("\n");
for(long long i=;i<=m+n;i++){
long long a=qu1[h1]+m*q;
if(h1>t1)a=;
long long b=qu2[h2]+(m-cnt2[h2])*q;
if(h2>t2)b=;
long long c=qu3[h3]+(m-cnt3[h3])*q;
if(h3>t3)c=;
long long d=max(a,max(b,c));
if(d==a)h1++;
else if(d==b)h2++;
else h3++;
if(i%t==)printf("%lld ",d);
}
return ;
}

最新文章

  1. Android keycode列表
  2. js颠倒数组元素顺序reverse()
  3. ENode 1.0 - 消息的重试机制的设计思路
  4. 上传图片到阿里云OSS和获取上传图片的外网url的步骤
  5. Message Forwarding
  6. SAP Connector 3.0 .Net 开发
  7. PHP中的Trait
  8. hdu 4641 K-string SAM的O(n^2)算法 以及 SAM+并查集优化
  9. poj 1611 The Suspects(简单并查集)
  10. Java中的内存泄漏问题
  11. Python学习笔记7-把函数当参数传递、指定可变参数
  12. 上一篇下一篇 排序 (非ID字段排序)
  13. 使用计算监控(Using computed observables)
  14. ArcGIS API for JavaScript 4.3学习笔记[新] AJS4.3和AJS3.20新特性
  15. ajax经典面试题
  16. SVN版本服务器搭建(服务端+客户端)
  17. c3p0的几种使用方式(原文地址: https://my.oschina.net/liangtee/blog/101047)
  18. 20155333 2016-2017-2 《Java程序设计》第九周学习总结
  19. Sublime Text 下的Install Package安装方法
  20. 小米5安装Xposed框架——需要解锁刷机

热门文章

  1. 51nod 1179 最大的最大公约数 (打表计数法)
  2. STM8S103 解决Rom空间不足 &amp; Map文件分析
  3. 初识Git(三)
  4. 基本数据类型(int,bool,str)
  5. Hdu 2586 树链剖分求LCA
  6. (WC2018模拟十二)【FJOI2016集训Day7T2】点对游戏
  7. [arc086e]snuke line
  8. BZOJ3413: 匹配(后缀自动机,Parent树,线段树合并)
  9. 【Tool】Linux下的Spark安装及使用
  10. linux 连接 NAS