解法一

直接考虑在初始为 \(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. Codeforces 855B:Marvolo Gaunt's Ring(枚举,前后缀)

    B. Marvolo Gaunt's Ring Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaun ...

  2. Log4自定义Appender介绍

    最初想要在执行一段业务逻辑的时候调用一个外部接口记录审计信息,一直找不到一个比较优雅的方式,经过讨论觉得log4j自定义的appender或许可以实现此功能.后来就了解了一下log4j的这部分. Ap ...

  3. CausalVAE: Disentangled Representation Learning via Neural Structural Causal Models

    目录 概 主要内容 模型 ELBO 关于 Yang M., Liu F., Chen Z., Shen X., Hao J. and Wang J. CausalVAE: disentangled r ...

  4. element 表格只展开一行(点击下一行上一行关闭)

    源码:第一步 <el-table :data="tableData" border :row-class-name="tableRowClassName" ...

  5. Ranger-Yarn插件安装

    Ranger-Yarn插件ranger-0.6.0-yarn-plugin安装到Yarn的所有ResourceManager节点, 其他的NodeManager节点不需要安装. 登陆hdfs安装的用户 ...

  6. CSS基础 表框圆角的基本使用和案例

    属性:border-radius:数字+px: 用途:修饰盒子圆角 使用语法格式: 1. border-radius:20px : /* 四个叫同时以半径20px圆角*/ 2. border-radi ...

  7. linux(CentOS7) 之 zookeeper 下载及安装

    下载 搜索apache ,进入apache官网(https://www.apache.org/)下载 选择downloads 下的distribution 点击archive site 找到zooke ...

  8. 原生android webview 显示的H5页面颜色属性无法识别 - 具体解决心得

    1.前言 background-color: #fc1717bf; 这个样式属性没毛病吧,浏览器都是支持的,但是在android 7.0 系统无法正确识别这个含有透明度的属性, 即bf无法识别,将默认 ...

  9. [BJDCTF2020]EzPHP-POP链

    那次某信内部比赛中有道pop链问题的题目,我当时没有做出来,所以在此总结一下,本次以buu上复现的[MRCTF2020]Ezpop为例. 题目 1 Welcome to index.php 2 < ...

  10. 【Java】重载与重写

    重载与重写 一.重载 定义 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可.同一个类.相同方法名,参数列表不同:参数个数不同,参数类型不同. Java的重载是可以包括 ...