\(\mathcal{Description}\)

  Link.

  一个沙漏内共 \(Xg\) 沙,令初始时上半部分为 A,下半部分为 B。沙漏在 \(r_1,r_2,\cdots,r_n\) 时刻会被瞬间翻转。\(q\) 次询问,每次询问给出 \((t,a)\),求初始时 A 有 \(ag\) 沙,\(t\) 时刻时 A 内沙的质量。保证 \(r_{1..n},t_{1..q}\) 升序。

  \(n,q\le10^5\)。

\(\mathcal{Solution}\)

  显然,随着初始 A 内沙质量的增多,任意时刻下 A 内沙的质量都不会减少。记 \(m(a,t)\) 表示初始 A 有 \(ag\) 沙,\(t\) 时刻时 A 内沙的质量,则应满足 \((\forall t)\left(m(0,t)\le m(a,t)\le m(X,t)\right)\);此外,若存在一个 \(t_0\),使得 \(m(a,t_0)=m(0,t_0)\)(或 \(m(a,t_0)=m(X,t_0)\)),则对于所有 \(t\ge t_0\),都有 \(m(a,t)=m(0,t)\)(或 \(m(a,t)=m(X,t)\))。

  据此,维护当前时刻 A 内沙子质量的上下界 \([l,u]\) 以及不考虑上方沙子漏完情况下的 A 内沙子质量 \(x\),若 \(x\in[l,u]\),根据上述性质,不存在沙子漏光的无效时间,\(x\) 就是本次询问答案;否则,取下界或者上界作为答案即可。

  复杂度 \(\mathcal O(n+q)\)。

\(\mathcal{Code}\)

/* Clearink */

#include <cstdio>
#include <iostream> inline int rint () {
int x = 0, f = 1; char s = getchar ();
for ( ; s < '0' || '9' < s; s = getchar () ) f = s == '-' ? -f : f;
for ( ; '0' <= s && s <= '9'; s = getchar () ) x = x * 10 + ( s ^ '0' );
return x * f;
} template<typename Tp>
inline void wint ( Tp x ) {
if ( x < 0 ) putchar ( '-' ), x = -x;
if ( 9 < x ) wint ( x / 10 );
putchar ( x % 10 ^ '0' );
} const int MAXN = 1e5;
int X, n, r[MAXN + 5]; int main () {
X = rint (), n = rint ();
for ( int i = 1; i <= n; ++ i ) r[i] = rint ();
int ubound = X, lbound = 0, cur = 0, tid = 1, side = -1;
for ( int q = rint (), t, a; q --; ) {
t = rint (), a = rint ();
for ( ; tid <= n && r[tid] <= t; side *= -1, ++ tid ) {
lbound = std::min ( X, std::max ( 0, lbound + side * ( r[tid] - r[tid - 1] ) ) );
ubound = std::min ( X, std::max ( 0, ubound + side * ( r[tid] - r[tid - 1] ) ) );
cur += side * ( r[tid] - r[tid - 1] );
}
int clb = std::min ( X, std::max ( 0, lbound + side * ( t - r[tid - 1] ) ) );
int cub = std::min ( X, std::max ( 0, ubound + side * ( t - r[tid - 1] ) ) );
int sum = cur + side * ( t - r[tid - 1] );
wint ( std::min ( cub, std::max ( clb, sum + a ) ) ), putchar ( '\n' );
}
return 0;
}

\(\mathcal{Details}\)

  一道很巧妙的题。假设 \(a\) 为常数,画出 \(m(a,t)\) 的函数图像,就是一个类似于多段绝对值函数的样子。可以非常直观的理解结论(可是我懒得画 owo)。

Solution -「ARC 082D」Sandglass的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  3. Solution -「ARC 110D」Binomial Coefficient is Fun

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...

  4. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  5. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  6. Solution -「ARC 126F」Affine Sort

    \(\mathcal{Description}\)   Link.   给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...

  7. Solution -「ARC 125F」Tree Degree Subset Sum

    \(\mathcal{Description}\)   Link.   给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...

  8. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

  9. Solution -「ARC 058C」「AT 1975」Iroha and Haiku

    \(\mathcal{Description}\)   Link.   称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...

随机推荐

  1. 用软碟通UltraISO刻录Win 10 1909 到U盘,只有1个G左右,安装不了系统

    之前一直用软碟通刻录WIN10的ISO镜像到U盘.最近想到用最新版的WIN10 1909 来做一个U盘系统,刻录也成功了.就是安装系统的时候总报错,找了很久原因,终于发现刻录后占用U盘的空间只有1G左 ...

  2. 使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows

    关键点:•许多组织的目标是构建自己的云平台,这些平台通常由内部部署架构和云供应商共建完成.•虽然Kubernetes没有提供开箱即用的完整PaaS平台式服务,但其具备完整的API,清晰的技术抽取和易理 ...

  3. 无聊的周末用Java写个扫雷小游戏

    周末无聊,用Java写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的.说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步. Sw ...

  4. JAVA多线程之并发编程三大核心问题

    概述 并发编程是Java语言的重要特性之一,它能使复杂的代码变得更简单,从而极大的简化复杂系统的开发.并发编程可以充分发挥多处理器系统的强大计算能力,随着处理器数量的持续增长,如何高效的并发变得越来越 ...

  5. 【刷题-LeetCode】199 Binary Tree Right Side View

    Binary Tree Right Side View Given a binary tree, imagine yourself standing on the right side of it, ...

  6. 【记录一个问题】golang中使用sync.Pool反而造成了负优化

    之前有这样的代码:从http收数据后,进行snappy解码: dst := make([]byte, 0, len(httpRequestData)*5) dst, err = snappy.Deco ...

  7. 【小问题】为啥乱搞就不行,golang没安装在系统目录下,导致go get出现"package bytes: directory "/home/ahfu/go/src/bytes" is not using a known version control system"

    想在自己的账号下安装golang开发环境,于是这样配置: wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz cd /home/ahfu ...

  8. unity3d inputfield标签控制台打印object

    inputfield标签控制台打印object 这说明没有字符串给入 这是因为 inputfield下的text不能人为写入值,只能在game界面输入. 所以这个标签里的text做个默认值不好搞.

  9. 地底,TypeScript和全球3D建筑发布于CesiumJS 1.70

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 2020年6月1日Cesium JS发布1.70 release ...

  10. IDEA设置Maven

    1,在idea中设置maven,让idea和maven结合使用 idea中内置了maven,一般不使用内置,因为用内置修改maven的设置不方便 使用自己安装的maven,需要覆盖idea中默认的设置 ...