【雅礼联考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( ...
随机推荐
- 为什么标准库的模板变量都是inline的
最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的! 不仅常见的实现上(libstdc++.libc++.ms stl)都是inline的 ...
- Linux通过脚本实现多台主机统一部署
该脚本分成三部分,一部分是获取信息的脚本:getInfo.sh 一个是main脚本:main.sh.一个是ssh连接主机脚本:sshing.sh main.sh #是否检查主机是否存活host_che ...
- Python:多进程并行编程与进程池
Python的并行编程可以采用multiprocessing或mpi4py模块来完成. multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器 ...
- ORM数据库查询优化only与defer(select_related与prefetch_related)
目录 一:数据库查询优化 1.ORM语句特点 2.only 3.defer 4.only与defer区别 5.select_related与prefetch_related 6.select_rela ...
- webShell攻击及防御
最近公司项目也是经常被同行攻击,经过排查,基本定位都是挂马脚本导致,所以针对webShell攻击做一下记录. 首先简单说下 什么是webShell? 利用文件上传,上传了非法可以执行代码到服务器,然后 ...
- (数据科学学习手札147)Python GIS利器shapely全新2.0版本一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,我写过很多篇介绍geopand ...
- python Flask 操作数据库(2)
单表操作 数据准备 from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True ...
- NOIP-2022游寄
NOIP-2022游寄 Day 1 虽然没有上次去南京CSP-S那么激动,但还是有点小开心的,毕竟能水掉两天课.Phigros重度沉迷患者,推了4个小时的分.坐右前方那哥们好卷,在车上写图论-- JS ...
- vivo 游戏中心低代码平台的提效秘诀
作者:vivo 互联网服务器团队- Chen Wenyang 本文根据陈文洋老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 VDC]获取互联网技术 ...
- IdentityServer4 - v4.x .Net中的实践应用
认证授权服务的创建 以下内容以密码授权方式为例. 创建模拟访问DB各数据源类 为模拟测试准备的数据源. /// 假设的用户模型 public class TestUser { public strin ...