解法一

直接考虑在初始为 \(a\) 的情况下时刻 \(t\) 时 \(A\) 中剩余的沙子是行不通的,不妨反过来考虑在时刻 \(t\) 每个初始值 \(a\) 的答案,令其为 \(f_t(a)\)。

因为若一开始 \(A\) 中沙子多之后的任意时刻 \(A\) 中的沙子也会更多,那么我们可以发现:\(f_t(0) \le f_t(1) \le \cdots \le f_t(X)\)。

单独考虑我们现在要求的 \(f_t(a)\),若 \(f_t(a)\) 的函数图像在某一点和 \(f_t(0) / f_t(X)\) 相交那么其接下来的函数图像必然会与 \(f_t(0) / f_t(X)\) 重合。

如果没有相交的话,\(f_t(a)\) 也必然不会与 \(y = X, y = 0\) 相交,此时就不会出现与 \(0\) 取 \(\max\) 或与 \(X\) 取 \(\min\) 的情况了,此时的函数值就可以快速算出了。

于是难点在于如何判断 \(f_t(a)\) 是否与 \(f_t(0), f_t(X)\) 相交。

首先我们先算出如果不相交的函数值 \(g_t(a)\),直觉告诉我们若 \(f_t(0) < g_t(a) < f_t(X)\) 那么没有相交否则越过哪条线就会与哪条线相交。

因为相交处必然在 \(y = 0, y = X\) 上,那么一旦相交就会比 \(f_t(0), f_t(X)\) 慢半拍以至于后面肯定在区间外。

那么我们只需计算出每个查询时刻 \(f_t(0), f_t(X)\) 以及不算相交的值即可,复杂度 \(\mathcal{O(n + m)}\)。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 1e5 + 5;
int n, q, t, a, k, X, P, buf, f[2], r[N];
int F(int x, int buf) { return max(0ll, min(X, x + buf));}
signed main () {
cin >> X >> n;
rep(i, 1, n) cin >> r[i];
cin >> q, P = 1;
f[0] = 0, f[1] = X;
while (q--) {
cin >> t >> a;
for (; r[P] <= t && P <= n; ++P) {
buf = (P & 1) ? -(r[P] - r[P - 1]) : (r[P] - r[P - 1]);
k += buf;
f[0] = F(f[0], buf), f[1] = F(f[1], buf);
}
buf = (P & 1) ? r[P - 1] - t : t - r[P - 1];
printf("%lld\n", max(F(f[0], buf), min(F(f[1], buf), a + k + buf)));
}
return 0;
}

解法二

首先需要解法一中相交及之前的分析。

接下来你会发现,函数图像一定先是一段与 \(f_t(0)\) 相同,然后是一段斜率为 \(1\) 的线段,接着一段与 \(f_t(X)\) 相同。

并且这一段与 \(f_t(0) / f_t(X)\) 相同的点对于接下来的每个时刻依然会相同,于是我们只需考虑维护出不同的两个拐点以及 \(f_t(0), f_t(X)\) 的函数值即可。

第一步正难则反的思考是十分重要的。

其次,每当我们有了一个新的想法或转化以后一定要将这个想法或转化下的性质挖掘清楚,观察显得尤为重要。

AT3527 [ARC082D] Sandglass的更多相关文章

  1. 2017国家集训队作业[arc082d]Sandglass

    2017国家集训队作业[arc082d]Sandglass 题意: ​ 有一个沙漏,初始时\(A\)瓶在上方,两个瓶子的最大容量都为\(X\)克,沙子流动的速度为\(1g\)每单位时间.给出\(K\) ...

  2. 【ARC082D】Sandglass

    Description ​ 题目链接 Description ​ 好题.题意是维护一个初始值,交替加减一段时间,有上界\(m\)和下界0(不能超过这两条界限),问对于某一种初始值,在某一个时刻时该值为 ...

  3. Sandglass

    题目描述 We have a sandglass consisting of two bulbs, bulb A and bulb B. These bulbs contain some amount ...

  4. 【AtCoder】ARC082 F - Sandglass

    [链接]F - Sandglass [题意]给定沙漏A和B,分别装着a和X-a的沙子,开始时A在上B在下,每秒漏1,漏完不再漏.给定n,有n个时刻ai沙漏倒转.给定m个询问,每次询问给定初值a和时刻t ...

  5. [arc082F]Sandglass

    Description 传送门 Solution 这题是真的666啊... 以下是本题最关键最关键的结论:如果ai<=aj,则在某个时间t,前者的A中沙子克数(记为t(ai))一定大于等于t(a ...

  6. [arc082f]Sandglass 递推

    Description 有一个沙漏由两个上下相通玻璃球A和B构成,这两个玻璃球都含有一定量的沙子,我们暂且假定AB中位于上方的玻璃球的为U,下方的玻璃球为L,则除非U中没有沙子,否则每秒钟都会有1克沙 ...

  7. 【推导】【模拟】AtCoder Regular Contest 082 F - Sandglass

    题意:有个沙漏,一开始bulb A在上,bulb B在下,A内有a数量的沙子,每一秒会向下掉落1.然后在K个时间点ri,会将沙漏倒置.然后又有m个询问,每次给a一个赋值ai,然后询问你在ti时刻,bu ...

  8. Arc082_F Sandglass

    Description有一个沙漏由两个上下相通玻璃球$A$和$B$构成,这两个玻璃球都含有一定量的沙子,我们暂且假定$A,B$中位于上方的玻璃球的为$U$,下方的玻璃球为$L$,则除非$U$中没有沙子 ...

  9. [ARC082F] Sandglass(线段树)

    Description 有一个沙漏由两个上下相通玻璃球 \(A\) 和 \(B\) 构成,这两个玻璃球都含有一定量的沙子,我们暂且假定 \(AB\) 中位于上方的玻璃球的为 \(U\),下方的玻璃球为 ...

随机推荐

  1. Spring MVC 文件上传、Restful、表单校验框架

    目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...

  2. 代码质量管理sonarqube部署使用

    一.sonarqube的部署 1.下载sonaqube:https://www.sonarqube.org/downloads/ 根据需要下载特定版本: 2.如果通过sonar-scanner进行代码 ...

  3. 手机端h5页面 图片根据手势放大缩小

    pinchzoom.js 这个插件可以简单的实现这一功能 <div class="big_pos_img page"> <div class="pinc ...

  4. CS5266 Type-C转HDMI+PD3.0+USB3.0 三合一拓展坞电路设计

    CS5266 Type-C转HDMI+PD3.0+USB3.0 三合一拓展坞电路设计 CS5266是一款带PD3.0快充 Type-C转HDMI 4K30HZ音视频转换芯片.CS5266支持PD3.0 ...

  5. [黑科技]pb_ds库(G++)

    一.hash(速度快的恐怖).http://codevs.cn/problem/1230/ 1 #include<stdio.h> 2 #include<ext/pb_ds/asso ...

  6. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

  7. 【Linux】Linux安装JDK

    1.下载linux版本的JDK1.8 链接:JDK下载链接 提取码:fxn4 链接:Xshell下载链接 提取码:439l 2.使用Xshell连接虚拟机,上传文件 在 /usr目录下创建一个新文件夹 ...

  8. CSS基础 BFC的使用方法

    BFC的作用和创建1.html标签是BFC盒子2.浮动元素是BFC盒子3.行内块元素是BFC盒子4.overflow属性值不为visible,如:auto.hidden...作用:1.清除浮动: 2. ...

  9. [Flask] Flask问题集(后端模板渲染项目)

    1.redirect和render_template的区别? redirect:重定向,会改变url render_template:模板渲染,用模板来渲染当前页,不会改变url 2.关于 'g' 对 ...

  10. linux tomcat【9.0.12】 使用 ssl证书 配置 https 的具体操作 【使用 域名 】

    1.前言 根据上一个随笔,已经可以正式在 阿里云服务器发布 工程了 ,但是用的协议默认是 http ,端口80 但是 http不安全 ,容易被拦截抓包 ,于是出来了个 https tomcat发布 对 ...