信息学奥赛一本通 1549:最大数 | 洛谷 P1198 [JSOI2008] 最大数

【题目链接】

ybt 1549:最大数
洛谷 P1198 [JSOI2008] 最大数

【题目考点】

1. 线段树:单点修改 区间查询

知识点讲解见:洛谷 P3374 【模板】树状数组 1(线段树解法)

【解题思路】

本题为设线段树维护区间最值,进行单点修改,区间查询。
每次操作可以是查询末尾L个数的最大值,或者在末尾添加一个数,一共进行m次操作,那么添加数的数量不超过m。
可以设初始存在一个长为m的序列,初值都为0。对该长为m的序列构建线段树,维护区间最大值。
已经实际添加是数的个数设为n,初值为0。

  • 如果要查询末尾l个数的最大值,则使用线段树查询区间[n−l+1,n][n-l+1,n][nl+1,n]中的最大值,结果保存在变量t,并将t输出。
  • 如果要添加数据,设输入为"A n",使用变量a保存输入的’n’的值。那么要插入的数值为输入的值a,加上上一次查询到的值t,再对d取模,为(a+t)%d。由于输入的值a以及上次查询的值都可能接近2∗1092*10^92109,因此需要将a与t转为long long类型相加,而后再对d取模。
    先将n增加1,此时序列第n元素为初值0。而后就需要让序列的第n元素增加(a+t)%d,使用线段树进行单点修改。

【题解代码】

  • 解法1:线段树
#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define INF 0x3f3f3f3f
struct Node
{int val, l, r, m;
} tree[4*N];
void pushUp(int i)
{tree[i].val = max(tree[2*i].val, tree[2*i+1].val);
}
void build(int i, int l, int r)
{tree[i].l = l, tree[i].r = r, tree[i].m = l+r>>1;if(l == r)//tree[i].val = 0return;build(2*i, l, tree[i].m);build(2*i+1, tree[i].m+1, r);pushUp(i);
}
void update(int i, int x, int v)//a[x] += v
{if(tree[i].l == tree[i].r){tree[i].val += v;return;}if(x <= tree[i].m)update(2*i, x, v);elseupdate(2*i+1, x, v);pushUp(i);
}
int query(int i, int l, int r)
{if(tree[i].l > r || tree[i].r < l)return -INF;if(l <= tree[i].l && tree[i].r <= r)return tree[i].val;return max(query(2*i, l, r), query(2*i+1, l, r));
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n = 0, t = 0, a, m, d, l;char c;cin >> m >> d;build(1, 1, m);while(m--){cin >> c;if(c == 'Q'){cin >> l;t = query(1, n-l+1, n);cout << t << '\n';}else //c == 'A'{cin >> a;update(1, ++n, ((long long)t+a)%d);//t+a可能超过int范围 }}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914417.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】什么在使能寄存器或外设之前必须先打开时钟?

这篇文章解释一个非常基础但是重要的问题&#xff1a; 为什么在使能寄存器或外设之前必须先打开时钟&#xff1f; 我们会发现&#xff0c;如果不开时钟就访问寄存器 ⇒ 会“写不进去”或“读取错误”。 因此&#xff0c;我们在写代码时&#xff0c;总是需要 先开时钟&#xff0…

Go·并发处理http请求实现

一、Goroutine介绍 基本原理 goroutine 是 Go 运行时(Runtime)管理的​​用户态线程。与线程相比,其初始栈空间仅约 2KB,创建和切换的开销更低,能够同时运行大量并发任务。 创建goroutine的方法非常简单,在将要调用的函数前加入go关键字即可。 func hello() {fmt.Pri…

USB一线连多屏?Display Link技术深度解析

DisplayLink 技术是一种基于USB接口的显示输出解决方案&#xff0c;通常用于通过USB端口连接多个显示器&#xff0c;尤其在笔记本电脑、平板电脑和台式机上&#xff0c;能够显著扩展显示屏的数量和分辨率。它的核心技术原理是通过压缩和传输图形数据&#xff0c;将视频信号通过…

AI 临床医学课题【总结】

最近参与了几个临床医学课题,总结一下如何跨界结合 1: 确定研究的方向: 这个是决定文章的核心 研究方向的时候,就要确定要投的期刊,平时看论文的时候要把一些常用的术语记录下来, 投的期刊,研究内容,方法记录一下。 2: 研究团队团队搭建(负责人:负责读论文,研究点…

PostgreSQL HOT (Heap Only Tuple) 更新机制详解

PostgreSQL HOT (Heap Only Tuple) 更新机制详解在PostgreSQL中&#xff0c;为了提高更新操作的性能并减少存储空间的浪费&#xff0c;引入了一种称为HOT (Heap Only Tuple) 的优化技术。HOT更新允许在相同的数据页内进行行的更新操作&#xff0c;而不需要创建一个新的物理行版…

macos安装iper3

brew install iperf3Running brew update --auto-update...安装homebrew&#xff0c;长久没用使用更新失效了。只好重新安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"破案了 原来是需要海外网了。。。。 b…

【设计模式】策略模式(政策(Policy)模式)

策略模式&#xff08;Strategy Pattern&#xff09;详解一、策略模式简介 策略模式&#xff08;Strategy Pattern&#xff09; 是一种 行为型设计模式&#xff08;对象行为型模式&#xff09;&#xff0c;它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它…

用TensorFlow进行逻辑回归(二)

逻辑回归的例子 逻辑回归是经典的分类算法。为了简单&#xff0c;我们考虑二分类。这意味着&#xff0c;我们要处理识别二个分类的问题&#xff0c;我们的标签为 0 或 1。 我们要一个与线性回归不同的激活函数&#xff0c;不同的损失函数&#xff0c;神经元的输出略有不同。我们…

Java设计模式之行为型模式(命令模式)介绍与说明

一、核心定义与目标 命令模式通过对象化请求&#xff0c;将操作的具体实现细节隐藏在命令对象中&#xff0c;使得调用者&#xff08;Invoker&#xff09;无需直接与接收者&#xff08;Receiver&#xff09;交互&#xff0c;仅需通过命令对象间接调用。这种解耦设计支持以下功能…

【深度学习新浪潮】xAI新发布的Grok4有什么看点?

Grok4作为马斯克旗下xAI公司最新发布的旗舰AI模型,其核心看点和评测要点可总结如下: 一、Grok4的核心看点 学术推理能力全面超越人类博士水平 在「人类终极考试」(HLE)中,Grok4基础版正确率达25.4%,启用工具后飙升至44.4%,远超Gemini 2.5 Pro(21.6%)和OpenAI o3(20.…

观成科技:基于自监督学习技术的恶意加密流量检测方案

1.前言当前&#xff0c;随着加密协议技术的广泛应用&#xff0c;互联网用户的个人流量隐私得到了有效保护&#xff0c;但与此同时也衍生出一系列安全问题。由于加密流量在传输过程中无法被解密&#xff0c;导致传输信息呈现“黑盒化”特征&#xff0c;这为恶意攻击者利用加密流…

通用定时器GPT

目录 GPT核心特性 GPT 计数器操作模式 重启模式 自由运行模式 GPT时钟源 GPT框图 输入捕获&#xff1a;测量外部信号的高电平脉冲宽度 输出比较&#xff1a;生成 1kHz PWM 波 GPT模块外部引脚复用与功能映射表 GPT使用注意事项 GPT Memory Map GPT寄存器 GPTx_CR寄存…

#oda0095. 字符串通配符【B卷 100分】-字符串

题目描述问题描述&#xff1a;在计算机中&#xff0c;通配符一种特殊语法&#xff0c;广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求&#xff1a;实现如下2个通配符&#xff1a;* &#xff1a;匹配0个或以上的字符&#xff08;注&…

面向对象设计原则

面向对象&#xff1a;是一种编程思想&#xff0c;面向过程是关注实现的步骤&#xff0c;每个步骤定义一个函数&#xff0c;调用函数执行即可。面向对象关注的是谁来执行&#xff0c;把具有相同属性和行为的一类事物进行抽象成类&#xff0c;然后再通过实例化出一个个具体的对象…

Hyperledger Fabric深入解读:企业级区块链的架构、应用与未来

一、引言&#xff1a;企业级区块链的标杆Hyperledger Fabric是Linux基金会主导的开源项目&#xff0c;专为企业级应用设计&#xff0c;以模块化架构、许可链机制和隐私保护为核心&#xff0c;广泛应用于金融、供应链、医疗等领域。相较于公有链&#xff08;如以太坊&#xff09…

从0开始学习R语言--Day45--Hausman检验

当我们在探究数据本身是否和变量相关时&#xff0c;往往都会对这两者进行回归分析&#xff0c;控制一下变量来看看趋势走向。但其实在分析前&#xff0c;我们可以先尝试做Hausman检验&#xff0c;这可以帮助我们判断数据的变化到底是因为变量不一样了还是因为自己的个体效应所以…

闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

Android事件分发机制完整总结

一、核心概念事件分发的本质Android事件分发采用责任链模式&#xff0c;事件从Activity开始&#xff0c;依次经过ViewGroup和View。整个机制只有一个入口&#xff1a;dispatchTouchEvent方法。onInterceptTouchEvent和onTouchEvent都不是独立的事件入口&#xff0c;而是被dispa…

【论文阅读】AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking

AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking3. AdaReasoner3.1 动机3.2 问题定义3.3 动作选择过程3.3.1 动作空间定义3.3.2 动作选择3.4 探索策略3.5 强化学习训练3.5.1 训练算法3.5.2 目标函数3.5.3 损失函数AdaReasoner: Adaptive Reasoning Enables Mo…

深入了解Modbus TCP:工业通信的“通用语言”

目录 简介一、Modbus TCP的“前世今生”二、Modbus TCP的核心特点三、Modbus TCP的工作原理1. 报文结构2. 功能码四、Modbus TCP的应用场景五、使用Modbus TCP的注意事项六、总结简介 在工业自动化的世界里,不同设备之间的“对话”至关重要。从PLC(可编程逻辑控制器)到传感…