首页 > 其他分享 >模仿jiangly封装的线段树单点修改模板

模仿jiangly封装的线段树单点修改模板

时间:2025-01-05 23:58:17浏览次数:6  
标签:Info lmx 单点 int rmx tr jiangly rmi 模板

https://codeforces.com/contest/2057/problem/D

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define int long long
#define endl '\n'
const int N=1e6+10,mod=998244353,INF=1e16;

typedef pair<int,int> PII;

#define ls u<<1
#define rs u<<1|1
//单点修改线段树,初始化时需要逐个单点修改
template<class Info>
struct SegmentTree {
	vector<Info> tr;
	int n;
	SegmentTree(int n_){
		init(n_);
	}
	void init(int n_){
		n=n_;
		tr.resize(4*n+4);
		build(1,1,n);
	}
	void build(int u,int l,int r){
		tr[u]=Info();
		if(l==r) return ;
		int m=l+r>>1;
		build(ls,l,m),build(rs,m+1,r);
		pushup(u);
	}
	void pushup(int u){
		tr[u]=tr[ls]+tr[rs];
	}
	void Modify(int u,int l,int r,int x,const Info &v){
		if(r<x||l>x)return ; 
		if(l==r&&x==l){
			tr[u]=v;
			return ;
		}
		int m=l+r>>1;
		Modify(ls,l,m,x,v);Modify(rs,m+1,r,x,v);
    	pushup(u);
	}
	void modify(int x,const Info &v){
		Modify(1,1,n,x,v);
	}
	Info Query(int u,int l,int r,int x,int y){//x和y是询问范围 
		if(l>x||r<y) return Info();
		if(l>=x&&r<=y) return tr[u];
		int m=l+r>>1;
		return Query(ls,l,m,x,y)+Query(rs,m+1,r,x,y);
	}
	Info query(int l,int r){
		return Query(1,1,n,l,r);
	}
};

struct Info{
	int rmx,lmx,rmi,lmi,ans;
	Info():rmx(-INF),lmx(-INF),rmi(INF),lmi(INF),ans(0){}
	Info(int x,int i):rmx(x-i),lmi(x-i),rmi(x+i),lmx(x+i),ans(0){}
};

Info operator+(const Info &a,const Info &b){
	Info c;
	c.rmx=max(a.rmx,b.rmx);
	c.lmx=max(a.lmx,b.lmx);
	c.rmi=min(a.rmi,b.rmi);
	c.lmi=min(a.lmi,b.lmi);
	c.ans=max(max(a.ans,b.ans),max(b.rmx-a.lmi,a.lmx-b.rmi));
	return c;
}

void slove(){
	int n,q;
	cin>>n>>q;
	SegmentTree<Info> seg(n);
	for(int i=1;i<=n;i++){
		int a;
		cin>>a;
		seg.modify(i,Info(a,i));
	}
	cout<<seg.query(1,n).ans<<endl;
	for(int i=1;i<=q;i++){
		int p,x;
		cin>>p>>x;
		seg.modify(p,Info(x,p));
		cout<<seg.query(1,n).ans<<endl;
	}
}
/*
2 0
1 10
*/
signed main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	int T=1;
	cin>>T;
	while(T--) slove();
}

标签:Info,lmx,单点,int,rmx,tr,jiangly,rmi,模板
From: https://www.cnblogs.com/mendax-Z/p/18654152

相关文章

  • 一个运行时打桩的模板
    被打桩的函数是STUB_FUN,可以替换成如__cudaRegisterFunction,另外插入的函数zwl_profiler可另外定义, .text .section .rodata.LC0: .string "STUB_FUN" .text .globl STUB_FUN .type STUB_FUN,@functionSTUB_FUN:.LFB15: endbr64 pushq %rbp movq %rsp,%rbp sub......
  • 如何使用可视化工具便捷修改网站模板?
    使用可视化工具可以简化网站模板的修改过程,无需编写代码。以下是详细步骤:选择可视化工具: 选择适合的可视化工具,如Elementor、Webflow或Wix。这些工具通常提供拖放界面,方便用户进行设计。注册和登录: 注册并登录所选的可视化工具账户。导入模板: 如果使用的是第三方模板,可以导......
  • 提升网站主页设计,掌握主页模板修改技巧
    修改网站主页模板可以显著提升用户体验和品牌形象。以下是具体操作步骤和建议:平台类型修改方法CMS系统登录到后台管理界面,在“模板”或“外观”选项中找到当前使用的模板进行编辑。可以使用可视化编辑器或直接编辑HTML/CSS文件。自定义模板如果使用了自定义模板,可......
  • 选择合适工具,掌握静态网站模板修改方法
    静态网站模板通常使用简单的HTML、CSS和JavaScript文件。以下是具体操作步骤和建议:工具类型使用方法代码编辑器使用代码编辑器(如VSCode、SublimeText)打开模板文件,进行必要的修改。文本编辑器使用文本编辑器(如Notepad++、Atom)打开模板文件,进行必要的修改。图形......
  • 物联网工程技术毕业设计题目万能选题方法模板(源码+原理图+PCB+洞洞板+开题报告+任务书
    万功题目模板**如:**1、把物联网技术改成STM32单片机,就成了《基于STM32的智能交通信号控制系统设计》2、把物联网改成89C51单片机,就成了《基于89C51的智能交通信号控制系统设计》3、把物联网改成ESP32单片机,就成了《基于ESP32的智能交通信号控制系统设计》以此类推下面本......
  • 模板多项式 exp
    ABC387G求\(n\)个点,每个回路长度都是质数的有标号无向连通图个数。首先回路之间肯定点不相交,否则若长度为\(a,b\)的两个点相交回路有\(k\)条公共边,则形成一个长度为\(a+b-2k\)的回路,而\(a+b-2k\)肯定是偶数且不是\(2\),它肯定不是质数。所以把回路缩起来之后,合法的......
  • 如何高效修改织梦PHP网站模板
    一、备份现有模板下载模板文件 首先,使用FTP客户端(如FileZilla、WinSCP)连接到服务器,下载现有的织梦模板文件到本地环境。确保下载过程中不遗漏任何文件或目录。备份数据库 使用phpMyAdmin或命令行工具(如mysqldump)导出整个数据库。确保导出过程中不遗漏任何表或记录。备份数......
  • 模板方法模式的代码实践示例
    模板方法模式的概念:在操作中定义算法的框架,将一些步骤延迟到子类中。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。什么时候可以用模板方法模式?有很固定的流程和步骤,就可以使用模板方法模式。所有子类都会按照相同的模板执行算法。子类不能改变算法结构......
  • 【玩转全栈】----Django模板语法、请求与响应
    目录一、引言二、模板语法三、传参1、视图函数到模板文件2、模板文件到视图函数四、引入静态文件五、请求与响应 1、请求2、响应六、综合小案例1、源码展示2、注意事项以及部分解释3、展示一、引言        像之前那个页面,太过简陋,而且一个完整的......
  • 【手把手-包教包会系列】java按模板多sheet导出Excel
    手把手带你java按模板多sheet导出Excel【包教包会系列】废话不多说直接撸代码1.引入依赖推荐使用3.2以上版本,原因是在性能上会有新的优化<!--easyExcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.......