博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LOJ2362. 「NOIP2016」蚯蚓【单调队列】
阅读量:5055 次
发布时间:2019-06-12

本文共 2035 字,大约阅读时间需要 6 分钟。


思路

良心来说这题还挺思维的

我没看题解也不知道要这样维护

把每次斩断的点分别放进两个队列里面

因为要维护增长,所以可以让新进队的节点来一个负增长?
是不是就好了?
然后很容易发现因为在原始队列中小的数比大的数如果多增加了\(k \times q\)在剩下两个队列中大的分别比小的多增加大于等于\(k \times q\)

然后随便维护一下


//Author: dream_maker#include
using namespace std;//----------------------------------------------//typenametypedef long long ll;//convenient for#define fu(a, b, c) for (int a = b; a <= c; ++a)#define fd(a, b, c) for (int a = b; a >= c; --a)#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)//inf of different typenameconst int INF_of_int = 1e9;const ll INF_of_ll = 1e18;//fast read and writetemplate
void Read(T &x) { bool w = 1;x = 0; char c = getchar(); while (!isdigit(c) && c != '-') c = getchar(); if (c == '-') w = 0, c = getchar(); while (isdigit(c)) { x = (x<<1) + (x<<3) + c -'0'; c = getchar(); } if (!w) x = -x;}template
void Write(T x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) Write(x / 10); putchar(x % 10 + '0');}//----------------------------------------------const int N = 1000010;int n, m;ll q, u, v, t, a[N];queue
Q[4];ll find_pos() { int res = 0; if (Q[1].size() && (!res || Q[1].front() > Q[res].front())) res = 1; if (Q[2].size() && (!res || Q[2].front() > Q[res].front())) res = 2; if (Q[3].size() && (!res || Q[3].front() > Q[res].front())) res = 3; return res;}int main() { Read(n), Read(m), Read(q), Read(u), Read(v), Read(t); fu(i, 1, n) Read(a[i]); sort(a + 1, a + n + 1); fd(i, n, 1) Q[1].push(a[i]); fu(i, 1, m) { ll pos = find_pos(), len = Q[pos].front(); Q[pos].pop(); len += (i - 1) * q; if (i % t == 0) { Write(len); putchar(' '); } ll l = len * u / v, r = len - l; l -= i * q; r -= i * q; Q[2].push(l); Q[3].push(r); } putchar('\n'); fu(i, 1, n + m) { ll pos = find_pos(), len = Q[pos].front(); Q[pos].pop(); len += m * q; if (i % t == 0) { Write(len); putchar(' '); } } return 0;}

转载于:https://www.cnblogs.com/dream-maker-yk/p/9784822.html

你可能感兴趣的文章
javascript的数组之sort()
查看>>
hdu3535 混合背包
查看>>
log4net使用
查看>>
linux 常用命令
查看>>
ubuntu 14.04 hadoop 1.2.1 伪分布式
查看>>
关于循环结构
查看>>
codeforces 1131D-Gourmet choice
查看>>
两个表中多个字段相同,查询一个中有在另一个表中没有的数据
查看>>
Spring框架IOC容器和AOP解析(转)
查看>>
为程序员的浩浩荡荡再加份力量
查看>>
批处理制作教程
查看>>
评价使用的输入法
查看>>
char的本质
查看>>
对回溯算法的理解(以数独游戏为例,使用c++实现)
查看>>
PHP_EOL
查看>>
Redis 基本命令
查看>>
软件测试基础 - 缺陷管理
查看>>
操作系统面试
查看>>
java-大数据运算
查看>>
谜题48:我所得到的都是静态的
查看>>