Codeforces Round #852 (Div. 2) F. Rebrending(树状数组+动态开点线段树)

基于Simulink进行多相电机EMI抑制的仿真建模 特点高可靠性:通过增加相数来提供冗余,增强系统的故障容忍度。低转矩脉动:改善了电机的动态性能,减少了转矩波动。复杂的EMI管理:更多的相数意味着更复杂的电磁环境,增加了EMI抑制的难度。挑战模型复杂性:涉及电气、机械和电磁场等多个领域的相互作用。实时性要求:控制系统需要能够快速响应以适应动态负载变化。多变量优化:包括滤波器设计、PWM调制策略等在内的多个参数需综合考虑以找到最优解。使用Simscape Electrical库来构建一个多相电机模型。 阅读详情

题目

n(n<=3e5)个数,第i个数ai(1<=ai<=n),ai两两不同

q(q<=1e6)次询问,每次给出l,r(l<r),

询问[l,r]区间内,值域最接近的两个数,其值域距离是多少

即求l<=s<=t<=r,min(abs(a[s]-a[t]))的值

原题链接

Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs

思路来源

题解 CF765F 【Souvenirs】 - lhm_ 的博客 - 洛谷博客

题解

考虑将询问离线,固定右端点i,只考虑满足 j<i,a_j>a_i的答案,

做一遍之后,再将a_i 的值域翻转(a_{i}=n+1-a_{i})后再做一遍就能得到所有情况。

对于某个右端点r,询问就是在树状数组上查询,

左端点l及l以后的每个位置j的答案的最小值,

所以每个位置j直接维护diff答案,树状数组上求后缀最小值

权值线段树查满足j<i,a_j>a_i的最大位置j

所以,维护动态开点的权值线段树,

下标[1,n],维护的是a值,只查[ai,n]这一段区间的

值域[1,n],维护的是位置,查询某一段区间的最大位置

但一个一个往前跳找出所有的位置j,复杂度无法接受,还需进一步优化。

考虑当前位置为j,要想下一次找到的位置 j' 能更新答案,

其必须满足a_{j'}-a_i<a_j-a_{j'},

因为,点对 (j',j)也会包含在[j',i]的区间中,

所以,a_j-a_{j'}也更新过这个区间询问的答案

所以,要更新后缀最小值就必须满足这个式子。
移项得 a_{j'}-a_i<\frac{1}{2}(a_j-a_i),发现差值每次减半,

具体来说,若a[pos]-a[i]为偶数,则除以2减1,

若为奇数直接除以2下取整,可以统一写做(a[pos]-a[i]-1)/2。

设值域为 V,因此在限制下往前跳的合法位置个数为 O(\log V)

复杂度为 O(n \log^2 V)。 

代码

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10,M=1e6+10;
struct BitSuf{
	static const int N=3e5+10,INF=0x3f3f3f3f;
	int n,tr[N];
	void init(int _n){
		n=_n;
		memset(tr,INF,(n+1)*sizeof(*tr));
	}
	void add(int x,int v){
		for(int i=x;i;i-=i&-i)
		tr[i]=min(tr[i],v);
	}
	int ask(int x){
		int ans=INF; 
		for(int i=x;i<=n;i+=i&-i)
		ans=min(ans,tr[i]);
		return ans;
	}
}tr;
struct DynamicSegmentTree{
	static const int N=3e5+10;
	int cnt;
	struct node{
		int l,r,mx;
		void init(){l=r=mx=0;}
		node(){init();} 
	}e[N*40];
	void init(){
		e[0].init();
		cnt=0;
	}
	DynamicSegmentTree(){init();}
	//1e5开*40,1e6开*45
	//其实开(log(maxn)*(n+m)*maxn)就好
	void newNode(int &cur){
		if(!cur){
			cur=++cnt;
			e[cnt].init();
		}
	}
	void upd(int l,int r,int &cur,int pos,int v){
		newNode(cur);
		e[cur].mx=max(e[cur].mx,v);
		if(l==r)return;
		int mid=(l+r)/2;
		if(pos<=mid)upd(l,mid,e[cur].l,pos,v);
		else upd(mid+1,r,e[cur].r,pos,v); 
	}
	int ask(int l,int r,int cur,int ql,int qr){
		if(!cur)return 0;
		if(ql<=l&&r<=qr)return e[cur].mx;
		int ans=0,mid=(l+r)/2;
		if(ql<=mid)ans=max(ans,ask(l,mid,e[cur].l,ql,qr));
		if(qr>mid)ans=max(ans,ask(mid+1,r,e[cur].r,ql,qr));
		return ans;
	}
}tr2;
int n,m,l,r,a[N],ans[M];
vector<tuple<int,int> >q[N];
void sol(){
	tr.init(n);
	tr2.init();
	int rt=0;
	for(int i=1;i<=n;++i){
		int pos=tr2.ask(1,n,rt,a[i],n);
		while(pos){
			tr.add(pos,a[pos]-a[i]);
			pos=tr2.ask(1,n,rt,a[i],(a[i]+a[pos]-1)/2);
		}
		tr2.upd(1,n,rt,a[i],i);
		for(auto &[l,id]:q[i]){ //后缀min
			ans[id]=min(ans[id],tr.ask(l));
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	tr.init(n);
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;++i){
		scanf("%d%d",&l,&r);
		q[r].push_back({l,i});
		ans[i]=n;
	}
	sol();
	for(int i=1;i<=n;++i){
		a[i]=n+1-a[i];
	}
	sol();
	for(int i=1;i<=m;++i){
		printf("%d\n",ans[i]);
	}
	return 0;
}

用 SNC 和 SAP Single Sign-On Secure Login 把 SAP 登录这件小事,变成一件安全又不用输密码的事 在传统的 SAP 系统里,登录这件事看起来很朴素:用户打开 SAP GUI,输入一个 SAP 用户名,再输入一个 SAP 密码,点回车,进系统,开始干活。表面上没毛病,但从安全角度看,这种老办法问题很大。默认情况下,这些用户名和密码在网络上传输时是明文,也就是不加密传输。攻击者如果在公司网络里做监听,理论上可以直接截取到口令信息,这种风险对今天任何一家合规要求高、审计严格的企业来说,基本是不可接受的。(SAP Help Portal)SAP 给出的答案叫做 ,全称是 。SNC 做的事情可以概括成两类:一类是 阅读详情

相关推荐

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 498

Codeforces 1111C Creating Snap (动态开点线段树)

wow 出题人太良心了放动态开点线段树过了 理解题意,发现我们要维护的是一个长度为 2n2^n2n 的区间。 于是我们想到用线段树来维护。 线段树的每个节点维护区间内的人数和价值,然后按照题意 pushuppushuppushup 即可。 注意如果一个区间内的人数为 000,这个区间的价值为 AAA 。 由于 2n2^n2n 很大,所以我们要动态开节点。 建树的时候将所有人依次插入线段树中。 最后...

Hacheylight 575

zemax混合式非序列模拟

注意不要点击左侧的非序列模式,那个时纯粹的非序列,会清除序列模式的数据。第2、4、6透镜材质为空气,是为了让光线进入到多重透镜内部。这时普通的优化方式会失败。平行光束经过多焦透镜时,会汇聚在不同焦距处。所以还需要控制能量的大小,进行优化。接下来用非序列模式设计一个多焦透镜。像面的孔径为圆形通光孔:0-1.2。透镜不同位置处有不同的聚焦位置。透镜的z轴位置相同,重合。

fendoudecheng的博客 3067

codeforces G - Almost Increasing Array 动态规划、动态开点线段树

题意 给出一个序列,允许删除一个元素,并将任意元素的值修改为任意整数,问最少修改多少个元素使得序列变成严格单调递增的序列? 题解 这道题目很具有启发性: 不考虑删除元素,原数列各个数值减去他们下标得到一个新的序列,那么新的序列的最长不减序列就是不需要修改的元素个数len,需要修改的元素个数就是n-len即可。 这道题也是这么做的,我们枚举要删除的元素下标为kkk,并且得到以元素k−1...

SUNSET 394

05、基于ALV表报实现复选框、全选、取消全选等功能

基于Function ALV实现复选框、全选及取消全选等功能

wo520yl1314的博客 2371

极验验证码: 一点即过验证(鼠标轨迹分析)

2、第一个验证接口分析(第一个w值还原) 3、第二个验证接口(第二个w值还原)这里定位w生成跟上篇文章一样,就不展开了;主要分析tt值(鼠标轨迹)的生成逻辑

qq_49268524的博客 1009

codeforces960F 2000分动态开点线段树

题目传送门 题意: 现在有n条带有权值的有向边,每条边表示从节点u到节点v的权值是w,第i条输入的边的编号是i。 这个图可能有自环,有重边,不保证连通。 现在让你找一条最长的路径,路径的长度是路径上有向边的个数。 按照这个有向路径的方向,每条路径上的边,编号严格递增,权值严格递增。 输出这个路径的长度。 题解: S是一个有向边,则定义len(S)是以S为路径的初始边的最长路径长度。...

Irving0323的博客 225

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 733

D. Petya and Array(树状数组、动态开点)

D. Petya and Array 文章目录题目描述输入输出样例思路代码 题目描述 输入输出 样例 样例输入#1 5 4 5 -1 3 4 -1 样例输出#1 5 样例输入#2 3 0 -1 2 -3 样例输出#2 4 样例输入#3 4 -1 -2 1 -2 3 样例输出#3 3 思路 代码 树状数组 int n, t; int tr[N], s[N], a[N]; int sum(int x) { int res = 0; for (; x; x -= x &

Cauchy的博客 599

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

Android SurfaceFlinger——概述(一)

对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。

小旭的专栏 2584

CodeForces - 960F[动态开点线段树优化dp]详解

题意:给一张有向图,每条边有边权与编号,求一条最长的路径,这条路径的边权与编号都是递增的。(编号指输入顺序) 首先我们回忆一下普通得LIS得做法:就是dp[i]以第i个结尾得最长上升子序列的长度,那么同理我们就可以推出这道题:(假设边是从u -> v)dp[v][w]就是以结点v结尾并且权值不大于w的LIS的最大长度 那么状态转移方程就是dp[v][w] = max(dp[u][1,2,3,4…w-1])很明显如果暴力去循环的化时间复杂度就会爆炸那么我们想一下如何去优化 优化:首先我们应如何在对

weixin_45630722的博客 384

proteus十字路口交通信号灯控制系统仿真课程设计.docx

proteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docxproteus十字路口交通信号灯控制系统仿真课程设计.docx

树状数组/线段树/动态开点线段树(板子整理)

树状数组/线段树/动态开点线段树(板子整理)

小衣同学的博客 822

SPD博士V5.3.zip.zip

SPD博士V5.3.zip.zip

带冲刷坑的圆形桩的 3D LBM 建.zip

1.版本:matlab2014a/2019b/2024b2.附赠案例数据可直接运行。3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

CodeForces - 1046A AI robots(动态开点线段树)

A. AI robots time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output In the last mission, MDCS has successfully shipped NN AI robots to M...

LP_Cong 662

JEDEC JESD235D:2021 High Bandwidth Memory DRAM (HBMl, HBM2) - 完整英文版(210页).pdf

JEDEC JESD235D:2021 High Bandwidth Memory DRAM (HBMl, HBM2) - 完整英文版(210页).pdf

CodeForces - 915E 动态开点线段树||离散化线段树

 题意: 给定1-n的一段空区间,每次给出 x  y  z  的询问,z == 1 时将 x - y 区间全部填充,否则为空,问最后一共有多少空区间 分析: 很明显的线段树题目,不过主要是想学习以下动态开点,不过数组范围自己一时间也还不懂怎么处理。看cf上很多大佬STL做的,很是骚,%%% #include&lt;bits/stdc++.h&gt; using namespace st...

兜率工的博客 688

Codeforces 915E. Physical Education Lessons(动态开点线段树)

E. Physical Education Lessons 题目:一段长度为n的区间初始全为1,每次成段赋值0或1,求每次操作后的区间总和。(n<=1e9,q<=3e5) 题意:用线段树做的话,没什么思维量,主要是空间复杂度的问题。因此采用动态开点的办法,即需要用到的节点,在使用前分配内存,没有用到的就虚置。这样每次操作新增的节点约logn个。则q次修改需要的空间大约是qlogn。但...

weixin_30919571的博客 152

【题解】洛谷P3960[NOIP2017]列队 线段树动态开点

题目链接 专程找到大佬题解,去学一波线段树的动态开点(我这么蒟蒻怎么会动态开点呢QAQ)(当然更不会平衡树什么的QAQ) 我会告诉你我快读里面ch^48没加括号RE4次吗qwq #include&amp;amp;lt;cstdio&amp;amp;gt; #include&amp;amp;lt;vector&amp;amp;gt; #include&amp;amp;lt;algorithm&amp;amp;gt; using namespace std

翻过这座山,他们就会听到你的故事 667

Codeforce 915E(线段树动态开点)

链接:点击打开链接 题意:Alex高中毕业了,他现在是大学新生。虽然他学习编程,但他还是要上体育课,这对他来说完全是一个意外。快要期末了,但是不幸的Alex的体育学分还是零蛋! Alex可不希望被开除,他想知道到期末还有多少天的工作日,这样他就能在这些日子里修体育学分。但是在这里计算工作日可不是件容易的事情: 从现在到学期结束还有 n 天(从 1 到 n 编号),他们一开始都是工作日。接下来

stay_accept的专栏 1249

Codeforces 915E 线段树动态开点

#include namespace fastIO { #define BUF_SIZE 10000000 //fread -> read bool IOerror = 0; inline char nc() { static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_

qq_36876305的博客 369

【学习】线段树的动态开点

就是用哪里开哪里,每次访问之前看看是否为空,为空就新建一个节点。 代码量小,非常好用。 题目来源:BZOJ 1012 代码: #include #include #define mid ((l+r)>>1) typedef long long ll; const int maxn = 200010; struct Tree{ ll mx; Tree* ch[2]

yhf_2015 1004

浅谈动态开点线段树

兴致勃勃的弱鸡想去学主席树了! 可惜突然发现动态开点线段树不会了。。。。 发挥大胆猜想,不用求证的精神:你们都会线段树 众所周知:线段树空间复杂度是O4*n,这就不用证,因为我菜 那当n很大,操作正常时,如果像正常的线段树一样(记左儿子为n+n,右儿子为n+n+1),再开四倍n会炸内存   怎么办呢? 想一想:时间复杂度与原来几乎差不多 mlg n,与原来差距只有没几倍的常数而已 ...

YYHS_WSF的博客 5873

codeforces 852F Product transformation

F. Product transformationtime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputConsider an array A with N elements, all being the same integer a.Define ...

C_K_Y_的博客 374

codeforces852F Product transformation 排列组合

题目链接:戳这里 题目大意:有一个长度为n的数组A,开始时,A内的元素全为a。 现在进行m次操作,每次操作将A[i]变为A[i]*A[i+1],最后一个元素不变。 现给出n,m,a,Q,输出m次操作后的A数组,每个元素对Q取模。 题解:因为每个数刚开始都是一样的,那么我们可以把乘法考虑为指数的相加。 用S代表指数,那么Si=Si+S(i+1)。 设S[i][j]表示第i个数经过

Twin Automata的博客 448

codeforces 852F Product transformation(数学)

F. Product transformation time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Consider an array A with N elemen

abutoto的博客 501

2019 ICPC Asia Nanchang Regional K.Tree(启发式合并+动态开点线段树)

题目 n(n<=1e5)个点的树,给定一个参数k(k<=1e5),代表两点距离上限 点i上有一个权值 询问树上有序对(x,y)的数量,满足以下条件: ①x不等于y ②x不是y的祖先 ③y不是x的祖先 ④x和y的距离不超过k,即 ⑤ 思路来源 https://blog.csdn.net/qq_43202683/article/details/104108315 题解 启发式合并,然后考虑枚举到轻儿子的时候,答案如何统计, 轻儿子统计的应该是重儿子子树或者已经被插入的轻儿子

小衣同学的博客 1256

洛谷P4137 Rmq Problem / mex(区间mex/主席树)

题目 有一个长度为n(n<=2e5)的数组(0<=ai<=1e9)。 m(m<=2e5)次询问,第i次询问给出一个区间(li,ri), 询问该区间内,没有出现过的最小自然数。 思路来源 https://www.luogu.com.cn/problem/solution/P4137 题解 首先,第i棵树维护的是只考虑[1,i]的值时,值域的最右位置,贪心 注意到答案只可能在[0,n]中,故直接忽略>n的ai值,令root[i]继承root[i-1], 否则...

小衣同学的博客 687
上一篇: 动态开点李超树(例题+板子总结)
下一篇: AtCoder Beginner Contest 289 G. Shopping in AtCoder store(离线凸包/在线凸包上二分/在线动态开点李超树)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值