#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】逃跑的更多相关文章

  1. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结

    考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ...

  2. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结

    第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...

  3. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数

    题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...

  4. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)树上路径

    题目 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和). 分析 点分治,设当前为x的,求在以x为根的子树中,经过x的路径(包括起点或 ...

  5. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary

    题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ...

  6. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value

    题目 分析 易证,最优的答案一定是按\(w_i\)从小到大放. 我们考虑dp, 先将w从小到大排个序,再设\(f_{i,j}\)表示当前做到第i个物品,已选择了j个物品的最大值.转移就是\[f_{i, ...

  7. 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix

    题目 分析 假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\): 同理,如果从\(F_{2,i}\)出发,那么对\(F ...

  8. [JZOJ4759] 【雅礼联考GDOI2017模拟9.4】石子游戏

    题目 描述 题目大意 在一棵树上,每个节点都有些石子. 每次将mmm颗石子往上移,移到根节点就不能移了. 双方轮流操作,问先手声还是后手胜. 有三种操作: 1. 询问以某个节点为根的答案. 2. 改变 ...

  9. 雅礼集训1-9day爆零记

    雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...

  10. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

随机推荐

  1. 关于linux fcitx输入法候选词中含有省略号的问题解决

    前言 这几天舍弃了 sogou 输入法,换上了google拼音输入法,因为我在纯文本终端调用中文输入法,搜狗显示出来的是加密的,候选词都是加密的,很烦这种 问题原因 这个问题主要是因为 云拼音 模块凉 ...

  2. 第五章:matplotlib水印和桑基图

    1.Matplotlib水印 1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x = np.linspace(0.0,10,40) ...

  3. 【微服务架构设计实施】第一部分:架构篇-1:微服务架构与Spring Cloud介绍

    〇.概述 一.微服务架构与Spring Cloud (一)概念 不同说法:细粒度的.清凉组件化的小型SOA(面向服务架构) 统一说法:小型应用程序(服务组件),使用轻量级设计方法和HTTP协议通信 理 ...

  4. SpringMVC02:返回值、json数据、文件上传、拦截器

     一.响应返回值 1.搭建环境(两个webapp,不要选错) 2.响应之返回值是String类型 package cn.itcast.controller; import cn.itcast.doma ...

  5. Springboot配置多Redis源

    Springboot配置多Redis源 一.背景 因项目部署了新集群,某些缓存数据需要在旧的redis上取,就必须配置多个数据源动态获取相对应的源以兼容业务. 二.配置依赖 <dependenc ...

  6. PyTorch复现GoogleNet学习笔记

    PyTorch复现GoogleNet学习笔记 一篇简单的学习笔记,实现五类花分类,这里只介绍复现的一些细节 如果想了解更多有关网络的细节,请去看论文<Going Deeper with Conv ...

  7. JavaScript:七大基础数据类型:字符串string

    在JS中,字符串类型的数据,有三种表达方式,但是无一例外都是需要引号扩起来的: 单引号'hello' 双引号"hello" 反引号`hello` 注意: 因为JS没有字符类型,这一 ...

  8. JavaScript 浅拷贝和深拷贝

    JavaScript 中的拷贝分为两种:浅拷贝和深拷贝. 一.浅拷贝 浅拷贝是指在拷贝过程中,只拷贝一个对象中的指针,而不拷贝实际的数据.所以,浅拷贝中修改新对象中的数据时,原对象中的数据也会被改变. ...

  9. 交叉编译esp8089

    交叉编译esp8089 编译环境: 硬件:全志R528 ubuntu:Linux ubuntu 4.15.0-194-generic #205-Ubuntu SMP Fri Sep 16 19:49: ...

  10. 异步async await 相关知识点总结以及代码练习

    <script> const setTimeoutToPromise = duration => new Promise(resolve => { setTimeout(res ...