题目大意

构造一个分段函数来拟合若干点(\(x_i , y_i\)),每一段是一个常函数,即

\[f(x)=
\left \{
\begin{aligned}
a_1& & (0\leq x <b_1) \\
a_2& & (b_1\leq x <b_2) \\
&......& \\
a_m& & (b_{m-1} \le x)
\end{aligned}
\right.
\]

误差的定义为

\[E=\max_{1\leq i\leq n} |f(x_i)-y_i|
\]

最小化误差,\(k\)次询问

输入格式

第一行为一个整数\(n\)

后面\(n\)行每行两个自然数,\(x_i,y_i\)

下一行为一个整数\(k\)

后面\(k\)行每行一个正整数\(m_i\)

输出格式

\(k\)行,每行一个整数表示金光第i个询问的答案

\(tips\): 输出可能不为整数

输入样例 #1

2

1 2

5 5

1

1

输出样例 #1

1.5

输入样例 #2

4

1 8

2 19

3 8

4 12

2

2

3

输出样例 #2

5.5

2

输入样例 #3

10

344 9026

762 1512

1463 2024

1688 7200

3832 4384

7225 3868

9048 2158

9706 6899

9812 1720

9851 8398

3

3

1

6

输出样例 #3

2844

3757

2370.5

说明

\(1\leq n\leq 10^6\)

\(0\leq x_i,y_i\leq 10^9,x_i < x_{i+1}\)

\(\sum m\leq 2\times 10^4\)

若V表示值域,每组数据\(n,k,V,\sum m\)小于等于以下值

\[\begin{aligned}
&N\!o.& & n & & k & &V & & \sum m \\
&1&& 10 & & 1 & &100 & & 1\\
&2&& 10 & & 1 & &100 & & 3 \\
&3&& 10 & & 3 & &10^4 & & 10 \\
&4&& 100 & & 1 & &10^5 & & 1 \\
&5&& 100 & & 1 & &10^5 & & 10 \\
&6&& 100 & & 10 && 10^5 & & 100 \\
&7&& 100 && 10 && 10^9& & 100 \\
&8&& 10^4 && 1 && 10^5 && 1 \\
&9&& 10^4 && 1 && 10^5 && 100 \\
&10&& 10^4 && 10 && 10^9& & 100 \\
&11&& 10^5 & &20 && 10^9 && 1000 \\
&12&& 10^5 && 100 && 10^9 && 10^4 \\
&13&& 10^6 && 1 && 10^9 && 1 \\
&14&& 10^6 & &1 & &10^9 & &100 \\
&15&& 10^6 && 10 && 10^9 && 100 \\
&16&& 10^6 && 10 && 10^9 && 2\times 10^4 \\
&17&& 10^6 && 200 && 10^9 && 2\times 10^4 \\
&18&& 10^6 && 200 && 10^9 && 2\times 10^4 \\
&19&& 10^6 && 200 && 10^9 && 2\times 10^4 \\
&20&& 10^6 && 200 && 10^9 && 2\times 10^4 \\
\end{aligned}\]

代码

#include<cstdio>
#include<iostream>
using namespace std; const int N = 1e6;
int n , y[N + 5] , m , k , Min[N + 5][23] , Max[N + 5][23] , ans; inline void prepare()
{
for(register int j = 1; (1 << j) <= n; j++)
for(register int i = 1; i + (1 << j) - 1 <= n; i++)
{
Min[i][j] = min(Min[i][j - 1] , Min[i + (1 << j - 1)][j - 1]);
Max[i][j] = max(Max[i][j - 1] , Max[i + (1 << j - 1)][j - 1]);
}
} inline bool check(int mid , int m)
{
int l = 1;
for(register int i = 1; i <= m && l <= n; i++)
{
int r = l , smin = y[l] , smax = y[l];
for(register int j = 22;j >= 0; j--)
if (r + (1 << j) <= n)
{
int tmin = Min[r + 1][j] , tmax = Max[r + 1][j];
if (max(smax , tmax) - min(smin , tmin) <= mid)
{
r += (1 << j);
smax = max(smax , tmax);
smin = min(smin , tmin);
}
}
l = r + 1;
}
return l > n;
} inline int work(int m)
{
int res , l = 0 , r = 1e9 , mid;
while (l <= r)
{
mid = (l + r) >> 1;
if (check(mid , m)) res = mid , r = mid - 1;
else l = mid + 1;
}
return res;
} int main()
{
// freopen("a.in" , "r" , stdin);
scanf("%d" , &n);
for(register int i = 1; i <= n; i++)
{
scanf("%*d%d" , &y[i]);
Min[i][0] = Max[i][0] = y[i];
}
prepare();
scanf("%d" , &k);
while (k--)
{
scanf("%d" , &m);
ans = work(m);
if (ans & 1) printf("%.1lf\n" , ans * 1.0 / 2);
else printf("%d\n" , ans / 2);
}
}

勇者sky遇上的命中注定的恋人白羽竟然是妹妹2的更多相关文章

  1. MVC遇上bootstrap后的ajax表单模型验证

    MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...

  2. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  3. 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)

        我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...

  4. 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)

    邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...

  5. 初识genymotion安装遇上的VirtualBox问题

    想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...

  6. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  7. 当创业遇上O2O,新一批死亡名单,看完震惊了!

    当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...

  8. LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)

    当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...

  9. LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)

    当DiscuzNT遇上了Loadrunner(中) 在上文中,介绍了如果录制脚本和设置脚本执行次数.如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了. 首先我们通过脚本编辑界面上 ...

  10. 当DOCKER遇上ESXI

    特别是你要为DOCKER窗口设置静态IP,且和公司局域网打成一片的时候, 苦逼的测试就会开始,我差不多前前后后测试了四五天,一百多个容器报废. NETNS,NSENTER,PIPWORK,各种镜像合下 ...

随机推荐

  1. volatile关键字在并发中有哪些作用?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA源码.职业成长.项目实战.面试相关资料等更多精彩文章在公众号「小牛呼噜噜」 前言 读过笔者之前的一篇文章J ...

  2. day26-过滤器Filter

    Filter过滤器 1.Filter过滤器说明 为什么需要过滤器? 先来看一个例子: 我们在登录网站页面时,需要先进行登录验证. 用户访问的正常的流程应该是: 用户先通过登录页面进行验证,然后才可以访 ...

  3. Class文件解析

    1 准备工作 获取class文件byte[] public static byte[] getFileBytes(File file) { try (FileInputStream fileInput ...

  4. linux系统编码修改

    1. 查看当前系统默认采用的字符集locale 2. 查看系统当前编码echo $LANG如果输出为:en_US.UTF-8     英文zh_CN.UTF-8     中文 3. 查看系统是否安装中 ...

  5. Spring02:注解IOC、DBUtils单表CRUD、与Junit整合

    今日内容:基于注解的IOC及IOC的案例 Spring中IOC的常用注解 案例-使用xml方式和注解方式实现单表的CRUD操作 持久层技术选型:DBUtils 改造基于注解的IOC案例,使用纯注解的方 ...

  6. MongoDB安全加固,防止数据库攻击删除勒索威胁

    前言: 今天发现前段时间自己搭建的一个系统的MongoDB数据找不到了,觉得很奇妙,然后登上MongoDB数据库发现多了一个名为READ__ME_TO_RECOVER_YOUR_DATA的数据库,里面 ...

  7. 在nodejs中体验http/2

    前言 2015年,HTTP/2 发布,直到2021年公司的项目才开始在实践中应用:自己对http2诸多特点的理解只存在于字面上,于是尝试在nodejs中实践一下,加深自己的理解. 多路复用 同域名下所 ...

  8. get请求拼接数组转字符串

    get请求拼接数组转换成字符串

  9. Windows下的SSH Server

    (请注意,本文内容以杂谈为主,稍微提及了一些在MobaXterm中开启SSH Server可能遇到的情况和解决方法,没有多少干货,请酌情查看,谢谢) 最近比较无聊,使用MobaXterm,无聊翻看里面 ...

  10. Spring Boot 3.0横空出世,快来看看是不是该升级了

    目录 简介 对JAVA17和JAVA19的支持 record Text Blocks Switch Expressions instanceof模式匹配 Sealed Classes and Inte ...