【高级数据结构】线段树

news2024/9/22 17:42:48
 

目录

 

 最大数(单点修改,区间查询)

线段树1(区间修改,区间查询)


最大数(单点修改,区间查询)

洛谷:最大数https://www.luogu.com.cn/problem/P1198

题目描述

现在请求你维护一个数列,要求提供以下两种操作:

1、 查询操作。

语法:Q L

功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。

限制:L不超过当前数列的长度。(L>0)

2、 插入操作。

语法:A n

功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。

限制:n是整数(可能为负数)并且在长整范围内。

注意:初始时数列是空的,没有一个数。

输入格式

第一行两个整数,M 和 D,其中 M 表示操作的个数,D 如上文中所述。

接下来的 M 行,每行一个字符串,描述一个具体的操作。语法如上文所述。

输出格式

对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。

输入输出样例

输入 #1复制

5 100
A 96
Q 1
A 97
Q 1
Q 2

输出 #1复制

96
93
96
// Problem: T - 最大数
// Contest: Virtual Judge - 2023暑期训练-基本算法
// URL: https://vjudge.net/contest/568123#problem/T
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
 
const int N = 2e5+5;
 
struct node{
	int minv;
}seg[4*N];
 
void update(int id){
	seg[id].minv=max(seg[id*2].minv,seg[id*2+1].minv);
}

void build(int id,int l,int r){
	if(l==r){
		return;
	}
	int mid=(l+r)/2;
	build(id*2,l,mid);
	build(id*2+1,mid+1,r);
	update(id);
}

void change(int id,int l,int r,int pos,int val){
	if(l==r){
		seg[id].minv=val;
	}
	else{
		int mid=(l+r)/2;
		if(pos<=mid) change(id*2,l,mid,pos,val);
		else change(id*2+1,mid+1,r,pos,val);
		update(id);
	}
}

ll query(int id,int l,int r,int ql,int qr){
	if(l==ql&&r==qr){
		return seg[id].minv;
	}
	int mid=(l+r)/2;
	if(qr<=mid){
		return query(id*2,l,mid,ql,qr);
	}
	else if(ql>mid){
		return query(id*2+1,mid+1,r,ql,qr);
	}
	else{
		return max(query(id*2,l,mid,ql,mid),query(id*2+1,mid+1,r,mid+1,qr));
	}
}
 
int main(){
	int n;
	ll p;
	cin>>n>>p;
	
	//build(1,1,n);
	
	int cnt=0,cur=0;
	for(int i=0;i<n;i++){
		char o;
		int x;
		cin>>o>>x;
		if(o=='A'){
			x=(x+cur)%p;
			change(1,1,n,cnt+1,x);
			cnt++;
		}
		else{
			cur=query(1,1,n,cnt-x+1,cnt);
			cout<<cur<<"\n";
		}
	}
 
 
	return 0;	
 
}

 

线段树1(区间修改,区间查询)

洛谷:线段树1icon-default.png?t=N6B9https://www.luogu.com.cn/problem/P3372

题目描述

如题,已知一个数列,你需要进行下面两种操作:

  1. 将某区间每一个数加上 k。
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n,m,分别表示该数列数字的个数和操作的总个数。

第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。

接下来 m 行每行包含 33 或 44 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [x,y] 内每个数加上 k。
  2. 2 x y:输出区间 [x,y] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例

输入 #1复制

5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4

输出 #1复制

11
8
20

 

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

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

相关文章

11-3_Qt 5.9 C++开发指南_QSqlQuery的使用(QSqlQuery 是能执行任意 SQL 语句的类)

文章目录 1. QSqlQuery基本用法2. QSqlQueryModel和QSqlQuery联合使用2.1 可视化UI设计框架2.1.1主窗口的可视化UI设计框架2.1.2 对话框的可视化UI设计框架 2.2 数据表显示2.3 编辑记录对话框2.4 编辑记录2.5 插入记录2.6 删除记录2.7 记录遍历2.8 程序框架及源码2.8.1 程序整体…

unity关于匀速移动某些值的方法

可能很多人会用到Verctor3.Lerp、Mathf.LerpUnclamped等等 这种其实不是匀速 看一下这个整体差不多的逻辑 public static float Lerp(float a, float b, float t){return a (b - a) * t;};这个逻辑就是&#xff0c;从a值到b值&#xff0c;返回一个a值加&#xff08;b值-a值&…

msvcp140.dll丢失怎么办?(详细解决方法)

1.msvcp140.dll有什么用&#xff1f; 运行C程序&#xff1a;msvcp140.dll文件包含了许多C程序所需的函数和资源&#xff0c;使得C程序能够在计算机上正确运行。 提供运行时库&#xff1a;msvcp140.dll文件包含了C程序在运行时所需的库文件&#xff0c;如输入/输出操作、内存管…

【梯度下降在波士顿房价预测中的应用】

数据准备 我们首先需要加载波士顿房价数据集。该数据集包含房屋特征信息和对应的房价标签。 import pandas as pd import numpy as npdata_url "http://lib.stat.cmu.edu/datasets/boston" raw_df pd.read_csv(data_url, sep"\s", skiprows22, headerN…

运算放大器基础(二)

5.4.4基于理想运放的放大倍数分析 集成运放两个工作区&#xff1a; 线性区、非线性区 集成运放的理想化参数&#xff1a; 理想运放在线性区的特点 集成运放工作在线性区的电路特征

DSA之查找(1):线性表的查找

文章目录 0 知识回顾1 查找1.1 查找的概念 2 线性表的查找2.1 顺序查找2.1.1 顺序查找算法2.1.2 顺序查找的性能分析2.1.3 顺序查找的特点 2.2 折半查找&#xff08;二分&#xff09;2.2.1 折半查找算法2.2.2 折半查找的性能分析2.2.3 折半查找的特点 2.3 分块查找2.3.1 分块查…

背包问题求具体方案数问题--板子题

12. 背包问题求具体方案 - AcWing题库 思路&#xff1a;先将v[i]和w[i]先输入进去&#xff0c;然后我们进行倒叙dp&#xff0c;这个做的目的就是为了后边我们为了匹配确定路径做好准备&#xff0c;如果我们倒叙输入进去&#xff0c;我们再正序的时候就可以用推导式来进行路径输…

MySql000——MySql的下载和安装

一、下载MySql 二、下载MySQL驱动 三、安装 到此&#xff0c;成功安装

P11 第三章 电阻电路的一般分析——极基础

1、结点电压法列题 结点电压法&#xff0c;回路电流法&#xff0c;网孔电流法都是为了减少列方程数量&#xff0c;都是为了求解分析电路&#xff0c;都是中间解法。 结点电压法解出了结点电压&#xff0c;对于具体分析需求&#xff0c;可能还需要二次求解。 2、结点电压法&a…

通过web.xml来配置servlet程序

IDEA 2022.3.3 tomcat-9.0.27 Java EE8 JDK-16 配置访问的虚拟路径 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

如何在数据中台中提高效率并节省成本?

上节讨论了如何保障数据中台的数据质量&#xff0c;让数据“准”。除了“快”和“准”&#xff0c;数据中台还离不开“省”。随数据规模越来越大&#xff0c;成本越来越高&#xff0c;如不合理控制成本&#xff0c;还没等你挖掘出数据应用价值&#xff0c;企业利润就被消耗完。…

python+appium自动化测试如何控制App的启动和退出

由于本人使用的是Android设备做自动化测试&#xff0c;所以以下内容均基于Android系统做出的整理 一、启动app 启动app需要设置Capability参数&#xff0c;而Capability参数放在Desired Capalibity中&#xff0c;Desired Capalibity告诉Appium想要的自动化平台和应用程序&…

Visitor设计模式访问元素方法的问题

Visitor设计模式访问元素方法的问题 GPT给出的答案寻找灵感前置声明Element层次的实例Visitor interface的声明Element interface的声明Element实际类的声明及实现实现一个Visitor客户端代码 实战测试结果 针对C来说&#xff0c;若要实现Visitor设计模式&#xff0c;则会面临循…

05. 容器资源管理

目录 1、前言 2、CGroup 2.1、是否开启CGroup 2.2、Linux CGroup限制资源能使用 2.2.1、创建一个demo 2.2.2、CGroup限制CPU使用 2.3、Linux CGroup限制内存使用 2.4、Linux CGroup限制IO 3、Docker对资源的管理 3.1、Docker对CPU的限制 3.1.1、构建一个镜像 3.1.2…

C语言入门篇(八)

前言   本篇分享的是部分操作符的概念与用法&#xff0c;从经典例题入手&#xff0c;带你快速了解和掌握。   收录专栏&#xff1a;浅谈C语言 操作符详解上 1. 操作符分类2. 算术操作符3. 移位操作符3.1 左移操作符3.2 右移操作符 4. 位操作符5. 赋值操作符6. 单目操作符6.…

Pytest常用的命令行

查看Pytest所有的命令行 Pytest -h 结果&#xff1a; 我们使用pytest时&#xff0c;忘记了会有哪些命令行&#xff0c;或是忘记哪个命令行怎么用&#xff0c;可以进行查看下。 执行参数 命令行参数 (1)--collect-only&#xff0c;打印出具体的执行从目录到用例执行的具体显…

is与==的区别

是比较运算符&#xff0c;用于比较两个值是否相等&#xff0c;结果返回布尔类型True或False is操作符是比较值所在的内存地址是否相同&#xff0c;结果返回布尔类型True或False aList [a,b,c] bList [a,b,c] # True print(aList bList) # False print(aList is bList)# 12…

【计算机网络】应用层协议 -- 安全的HTTPS协议

文章目录 1. 认识HTTPS2. 使用HTTPS加密的必要性3. 常见的加密方式3.1 对称加密3.2 非对称加密3.3 非对称加密对称加密 4. 引入CA证书4.1 CA认证4.2 数据签名4.3 非对称机密对称加密证书认证4.4 常见问题 5. 总结 1. 认识HTTPS HTTPS全称为 Hyper Text Tranfer Protocol over …

Java---第八章(字符串-----String,StringBuilder 和 StringBuffer)

Java---第八章 字符串String字符串的常用方法StringBuilder和StringBuffer常用方法 对比String 和StringBuilder 和 StringBuffer 字符串 String 特性&#xff1a; String 类位于java.lang包中&#xff0c;无需引入&#xff0c;可直接使用String 类是由final修饰的&#xff…

【cpolar内网穿透工具】

文章目录 cpolar内网穿透工具.md概述什么是cpolar&#xff1f;cpolar可以用在哪些场景&#xff1f; 1. 注册cpolar帐号1.1 访问官网站点&#xff1a;[https://www.cpolar.com](https://link.zhihu.com/?targethttps%3A//www.cpolar.com/) 1.2 注册帐号 2. 下载Windows版本cpol…