ABC196E 题解

前言

题目传送门!

更好的阅读体验?

很有趣的题,取决于思考方向。

思路

如果你一开始想着从 x 开始,将某些操作进行某些合并,再用某个数据结构维护,那么你做不出来。

正确的思考方向:将 x 认为是一个未知数,维护一个 [L,R] 的范围。

  • ti=1[L,R][L+ai,R+ai]
  • ti=2[L,R][max(L,ai),max(R,ai)]
  • ti=3[L,R][min(L,ai),min(R,ai)]

对于一个 x,先将 ti=1 所增加偏移量补上。然后再把它限制进去 [L,R] 里,即:答案为 max(L,min(R,x+add)

代码

#include <iostream>
#include <cstdio>
using namespace std;
long long min(long long x, int y) {return x < y ? x : y;}
long long max(long long x, int y) {return x > y ? x : y;}
int main()
{
	int n, q; long long minx = -1e18, maxx = 1e18, add = 0;
	scanf("%d", &n);
	while (n--)
	{
		int x, op;
		scanf("%d%d", &x, &op);
		if (op == 1) minx += x, maxx += x, add += x;
		else if (op == 2) minx = max(minx, x), maxx = max(maxx, x);
		else if (op == 3) minx = min(minx, x), maxx = min(maxx, x);
	}
	scanf("%d", &q);
	while (q--)
	{
		int x; scanf("%d", &x);
		printf("%lld\n", max(minx, min(maxx, x + add)));
	}
	return 0;
}

希望能帮助到大家!

posted @   liangbowen  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示