\(\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. Python爬取中国知网文献、参考文献、引证文献

    前两天老师派了个活,让下载知网上根据高级搜索得到的来源文献的参考文献及引证文献数据,网上找了一些相关博客,感觉都不太合适,因此特此记录,希望对需要的人有帮助. 切入正题,先说这次需求,高级搜索,根据中 ...

  2. vue注册全局组件

    在项目开发中能不能自己写一个组件可以像iview或者element那样可以不必引用就可以直接用呢?答案是可以的. 首先,写一个组件mainHeader. 接着在vue中注册这个组件,代码如下: Vue ...

  3. prtotype原型对象

    js每个对象都拥有一个原型对象,每个对象都能从原型对象继承方法和属性,原型链就是基于原型对象而产生的, 也就是说,每个对象都能继承原型对象的方法和属性,这样一层一层的继承,就形成了原型链 当然,你也可 ...

  4. 【Java常用类】LocalDate、LocalTime、LocalDateTime

    LocalDate.LocalTime.LocalDateTime 说明 JDK 1.0中包含了 一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被 ...

  5. 【Java】二分法查找

    二分法查找 前提:所要查找的数组必须有序 public class Dichotomy { public static void main(String[] args) { int[] array = ...

  6. HttpRunner3的变量是如何传递的

    HttpRunner3的变量可以在测试类的用例配置中通过variables添加,也可以在测试步骤中使用extract().with_jmespath()提取出来放到变量x,再用$x传递给下一个接口使用 ...

  7. jsp标签问题

    在jsp页面使用标签过程中有时候不注意规则的话,eclipse会提示一些错误,下面针对这些错误提出相应的解决办法:<form></form>标签1. Invalid locat ...

  8. 【刷题-LeetCode】148 Sort List

    Sort List Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4 ...

  9. Redis的过期删除策略(和内存淘汰机制)-转

    版权声明:本文为CSDN博主「奥修诺斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_39944869/ ...

  10. Windows Server 2008 R2 数据离机备份与恢复操作手册

    Windows Server 2008 R2 数据离机备份与恢复操作手册 实验环境 Windows server 2008 R2(服务器) IP地址:192.168.136.175 计算机名:CXH ...