Solution -「ARC 082D」Sandglass
Link.
一个沙漏内共 沙,令初始时上半部分为 A,下半部分为 B。沙漏在 时刻会被瞬间翻转。 次询问,每次询问给出 ,求初始时 A 有 沙, 时刻时 A 内沙的质量。保证 升序。
。
显然,随着初始 A 内沙质量的增多,任意时刻下 A 内沙的质量都不会减少。记 表示初始 A 有 沙, 时刻时 A 内沙的质量,则应满足 ;此外,若存在一个 ,使得 (或 ),则对于所有 ,都有 (或 )。
据此,维护当前时刻 A 内沙子质量的上下界 以及不考虑上方沙子漏完情况下的 A 内沙子质量 ,若 ,根据上述性质,不存在沙子漏光的无效时间, 就是本次询问答案;否则,取下界或者上界作为答案即可。
复杂度 。
/* 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;
}
一道很巧妙的题。假设 为常数,画出 的函数图像,就是一个类似于多段绝对值函数的样子。可以非常直观的理解结论(可是我懒得画 owo)。
分类:
C.特殊题目 / 思维
, C.特殊题目 / 性质/结论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现