传送门

好题。

目测只会多带一个log2(n+m)" role="presentation" style="position: relative;">log2(n+m)log2(n+m)的解法,看了题解之后才会正解。

解析:

我们用三个队列来维护每次弹出的值。

第一个队列就是原数列。

第二个队列是每次砍掉后短的那一节组成的,第三个队列是长的那一节组成的。

显然这三个队列都具有单调性。

那么每次从三个队列中选一个最大的然后压入后两个队列里就行了。

实现细节见代码吧。

代码:

#include<bits/stdc++.h>
#define N 7000005
#define ll long long
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
inline void write(int x){
    if(x>9)write(x/10);
    putchar((x%10)^48);
}
inline bool cmp(const int&a,const int&b){return a>b;}
int q[3][N],n,m,Q,t,u,v,hd[3],tl[3],tmp,delta=0;
inline int calc(){
    int pos,ret=-2147483647;
    for(int i=0;i<3;++i)if(hd[i]<tl[i]&&q[i][hd[i]+1]>ret)pos=i,ret=q[i][hd[i]+1];
    ++hd[pos];
    return ret;
}
int main(){
    n=read(),m=read(),Q=read(),u=read(),v=read(),t=read();
    for(int i=1;i<=n;++i)q[0][++tl[0]]=read();
    sort(q[0]+1,q[0]+n+1,cmp);
    for(int i=1;i<=m;++i){
        int tmp=calc()+delta;
        if(i%t==0)write(tmp),putchar(i+t>m?'\n':' ');
        int shor=(long long)tmp*u/v,lon=tmp-shor;
        delta+=Q,q[1][++tl[1]]=shor-delta,q[2][++tl[2]]=lon-delta;
    }
    if(t>m)puts("");
    for(int i=1;i<=n+m;++i){
        int tmp=calc()+delta;
        if(i%t==0){write(tmp);if(i+t<=n+m)putchar(' ');}
    }
    return 0;
}

2018.09.11 bzoj47214721: [Noip2016]蚯蚓(单调队列)的更多相关文章

  1. [noip2016]蚯蚓<单调队列+模拟>

    题目链接:https://vijos.org/p/2007 题目链接:https://www.luogu.org/problem/show?pid=2827#sub 说实话当两个网站给出AC后,我很感 ...

  2. 2018.09.06 烽火传递(单调队列优化dp)

    描述 烽火台是重要的军事防御设施,一般建在交通要道或险要处.一旦有军情发生,则白天用浓烟,晚上有火光传递军情. 在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价.为了使情报准确传递, ...

  3. luogu 2827 蚯蚓 单调队列/优先队列

    易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...

  4. 洛谷P2827 蚯蚓(单调队列)

    题意 初始时有$n$个蚯蚓,每个长度为$a[i]$ 有$m$个时间,每个时间点找出长度最大的蚯蚓,把它切成两段,分别为$a[i] * p$和$a[i] - a[i] * p$,除这两段外其他的长度都加 ...

  5. 2018.09.11 loj#10216.五指山(exgcd)

    传送门 就是一个exgcd的板子. 但注意算距离差的时候是在一个环上面算. 还有,答案要开long long233... 注意这两点之后就是exgcd板子了. 代码: #include<bits ...

  6. 2018.09.11 poj2976Dropping tests(01分数规划)

    传送门 01分数规划板子题啊. 就是简单变形移项就行了. 显然 ∑i=1na[i]∑i=1nb[i]≤k" role="presentation" style=" ...

  7. 2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)

    传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了.(尽管时间复杂度是假的O(n3/32)" role="presentation" styl ...

  8. 2018.09.11 poj1845Sumdiv(质因数分解+二分求数列和)

    传送门 显然需要先求出ab" role="presentation" style="position: relative;">abab的所有质因 ...

  9. 2018.09.11 bzoj3629: [JLOI2014]聪明的燕姿(搜索)

    传送门 一道神奇的搜索. 直接枚举每个质因数的次数,然后搜索就行了. 显然质因数k次数不超过logkn" role="presentation" style=" ...

随机推荐

  1. indy字符编码

    以前是TEncoding.Unicode 现在是IndyTextEncoding_Default

  2. python传参数

    Python参数传递采用的肯定是“传对象引用”的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对 ...

  3. 了解innodb_support_xa(分布式事务)

    innodb_support_xa可以开关InnoDB的xa两段式事务提交.默认情况下,innodb_support_xa=true,支持xa两段式事务提交.此时MySQL首先要求innodb pre ...

  4. 使用flash导出图集动画到unity

    1.选中要导出的元件,元件所有动作要对齐,右键导出Sprite Sheet.. 2.设置如下 3.复制导出的png图片到unity,对图片进行网格裁剪,网格宽高在plist文件中:

  5. Haskell语言学习笔记(46)Parsec(3)

    Applicative Parsing 使用 Applicative 式的 Parser. 包括使用 (<$>), (<*>), (<$), (<*), (*> ...

  6. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理

    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错. 当我们在访问一个站点的时候,如果访问的地址不存在(404), ...

  7. adb连接过程中常见问题解决方法

    在测试过程中经常会遇到需要使用adb连接服务器的问题,但是有时候经常会遇到连不上的情况,总结两种解决方式 1)error: unknown host service 此问题是由于端口号已经被占用了,可 ...

  8. SQL 数据库 子查询及示例

    子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在 ...

  9. 多序列比对后可视化之texshade

    一 :准备工作 1)中文的 LaTeX - CTEX 2)LaTeX 的*.tex 的编辑工具-Texmarker 3)TEXshade宏包 二:安装 1) 直接双击运行下载的CTEX,安装过程中,可 ...

  10. Maven 基础配置

    pom.xml基础配置: maven中,最让我迷惑的还是那一堆配置! 就拿这个属性配置来说: <properties> <project.build.sourceEncoding&g ...