【雅礼联考DAY01】逃跑
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<cstdio>
using namespace std;
const int N = 30000;
const double INF = 1e8;
int n , l , a[N + 5] , b[N + 5] , c[N + 5] , q[N + 5] , head , tail , Mk , Mc;
double ans , f[N + 5] , w[N + 5];
struct tree{double max , tag;}t[(N << 2) + 5];
inline double max(double x , double y) {return x > y ? x : y;}
inline void build(int l , int r , int k)
{
t[k] = (tree){0 , 0};
if (l == r)
{
t[k].max = f[l];
return;
}
int mid = (l + r) >> 1;
if (l <= mid) build(l , mid , k << 1);
if (r > mid) build(mid + 1 , r , k << 1 | 1);
t[k].max = max(t[k << 1].max , t[k << 1 | 1].max);
}
inline void pushdown(int k)
{
if (!t[k].tag) return;
t[k << 1].max += t[k].tag;
t[k << 1 | 1].max += t[k].tag;
t[k << 1].tag += t[k].tag;
t[k << 1 | 1].tag += t[k].tag;
t[k].tag = 0;
}
inline void update(int l , int r , int k , int x , double v)
{
if (l == r && l == x)
{
t[k].max = v;
return;
}
int mid = (l + r) >> 1;
pushdown(k);
if (x <= mid) update(l , mid , k << 1 , x , v);
if (x > mid) update(mid + 1 , r , k << 1 | 1 , x , v);
t[k].max = max(t[k << 1].max , t[k << 1 | 1].max);
}
inline void change(int l , int r , int k , int tl , int tr , double v)
{
if (l >= tl && r <= tr)
{
t[k].tag += v;
t[k].max += v;
return;
}
int mid = (l + r) >> 1;
pushdown(k);
if (tl <= mid) change(l , mid , k << 1 , tl , tr , v);
if (tr > mid) change(mid + 1 , r , k << 1 | 1 , tl , tr , v);
t[k].max = max(t[k << 1].max , t[k << 1 | 1].max);
}
inline double query(int l , int r , int k , int tl , int tr)
{
if (l >= tl && r <= tr) return t[k].max;
int mid = (l + r) >> 1;
double res = -INF;
pushdown(k);
if (tl <= mid) res = max(res , query(l , mid , k << 1 , tl , tr));
if (tr > mid) res = max(res , query(mid + 1 , r , k << 1 | 1 , tl , tr));
return res;
}
inline bool check(double m)
{
for(register int i = 1; i <= n; i++) w[i] = a[i] - b[i] * m , f[i] = -INF;
f[0] = 0;
build(0 , n , 1);
q[head = tail = 1] = 0;
for(register int i = 1; i <= n; i++)
{
while (head < tail && c[i] >= c[q[tail]])
{
change(0 , n , 1 , q[tail - 1] , q[tail] - 1 , -w[q[tail]]);
tail--;
}
q[++tail] = i;
change(0 , n , 1 , q[tail - 1] , q[tail] - 1 , w[q[tail]]);
f[i] = query(0 , n , 1 , i - l > 0 ? i - l : 0 , i - 1);
update(0 , n , 1 , i , f[i]);
}
return f[n] >= 0;
}
int main()
{
// freopen("逃跑.in" , "r" , stdin);
scanf("%d%d" , &n , &l);
for(register int i = 1; i <= n; i++) scanf("%d%d%d" , &a[i] , &b[i] , &c[i]);
c[0] = INF;
double l = 0 , r = 1e6 , mid;
for(register int i = 1; i <= 60; i++)
{
mid = (l + r) * 0.5;
if (check(mid)) l = mid , ans = mid;
else r = mid;
}
if (ans == 0)
{
puts("0.000000000e+000");
return 0;
}
Mk = 0 , Mc;
if (ans < 1)
{
while (ans < 1) ans *= 10 , Mk++;
printf("%.9lfe-" , ans);
if (Mk == 0) Mc = 3;
else if (Mk < 10) Mc = 2;
else if (Mk < 100) Mc = 1;
else Mc = 0;
while (Mc--) putchar('0');
if (Mk > 0) printf("%d" , Mk);
return 0;
}
while (ans >= 10) ans /= 10 , Mk++;
printf("%.9lfe+" , ans);
if (Mk == 0) Mc = 3;
else if (Mk < 10) Mc = 2;
else if (Mk < 100) Mc = 1;
else Mc = 0;
while (Mc--) putchar('0');
if (Mk > 0) printf("%d" , Mk);
}
【雅礼联考DAY01】逃跑的更多相关文章
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结
考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ...
- 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结
第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...
- 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数
题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...
- 【NOIP2016提高A组模拟8.19】(雅礼联考day2)树上路径
题目 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和). 分析 点分治,设当前为x的,求在以x为根的子树中,经过x的路径(包括起点或 ...
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary
题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ...
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value
题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i, ...
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix
题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F ...
- [JZOJ4759] 【雅礼联考GDOI2017模拟9.4】石子游戏
题目 描述 题目大意 在一棵树上,每个节点都有些石子. 每次将mmm颗石子往上移,移到根节点就不能移了. 双方轮流操作,问先手声还是后手胜. 有三种操作: 1. 询问以某个节点为根的答案. 2. 改变 ...
- 雅礼集训1-9day爆零记
雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...
- NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)
昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...
随机推荐
- python关于error: invalid command 'bdist_wheel报错的解决
看了很多解决办法,大部分在扯去下载一个 .whl 源文件然后在pip 安装,经过我亲自测试执行完这句即可解决! pip3 install wheel
- Microsoft.IO.RecyclableMemoryStream源码解读
一.RecyclableMemoryStreamManager 源码地址:https://github.com/Microsoft/Microsoft.IO.RecyclableMemoryStrea ...
- 【Java EE】Day06 JDBC连接池介绍、C3P0连接池实现、Druid连接池实现、JDBCTemplate
一.数据库连接池介绍 1.引入 之前:每次都要获取连接释放连接 现在:连接重复使用 2.概念: 存放数据库连接的容器 3.实现 DataSource接口 三种实现 标准实现 连接池实现 C3P0 Dr ...
- 【消息队列面试】6-10:Rebalance机制、副本同步机制、架构设计、zk的作用、kafka的高性能
六.简述kafka的Rebalance[偏向实战,有难度] 1.背景 kafka日志:在消息量大.高并发时,经常会出现rebalance中 rebalance会影响kafka性能,会阻塞partiti ...
- 【每日一题】【回溯】【StringBuilder】2021年12月7日-17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 来源:力扣(LeetCode)链 ...
- python软件开发目录规范
软件开发目录规范 1.文件及目录的名字可以变换 但是思想是不变的 分类管理 2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类 myproject项目文件夹 1,bin文件夹 -- ...
- linux系统部署微服务项目
**:如果使用阿里云linux服务器 1.设置容器镜像服务 在阿里云平台搜索 "容器镜像服务" 选择"CentOS" 安装/升级Docker客户端 配置镜像加速 ...
- 【前端调试】- 借助Performance分析并优化性能
欢迎阅读本系列其他文章 [前端调试]- 更好的调试方式 VSCode Debugger [前端调试]- 断点调试的正确打开方式 介绍 首先简单过一下Performance的使用,打开网页点击控制台Pe ...
- 原生js实现rsa加密
原生js实现rsa加密 示例 createNewUserKey().then(function(keyPairs) { encrypt("this is origin text", ...
- 微软拼音长句模式恢复工具支持Win10 1803
4月份就有人留言旧微软拼音恢复工具不支持Win10 1803了,我自己也遇到了,但因为没时间搞,勉为其难使用了词组模式的微软拼音几个月,终于在八月份抽个空研究了下,解决了. 这次是因为傻逼大微软改了 ...