[Codeforces264E][线段树][DP]Roadside Trees

线段树 & 线段树合并优化 DP 阅读详情

翻译

在 1∼n1∼n1∼n 的位置能种树,刚开始能种树。
第 iii 个时刻会有操作:
1.在一个没种过树的位置 pip_ipi​种一颗高度为hih_ihi​的树。
2.砍掉第 xix_ixi​棵树,保证这个位置以后不会种树。
每天树会长高111
每执行一次操作,输出最长上升子序列长度
任意时刻树的高度不同

题解

看完题…不会做
看完数据范围…有点想法
每次加入的高度不会超过10
每次删除的树不会超过前十个
保证任意时刻没有树的高度是相同的
每个点记录一个dp[i]dp[i]dp[i]表示以他为开头的LIS
显然加入一棵树的时候只会影响最多10棵树的答案
删除一棵树的时候也只会影响最多10棵树的答案
对于加入,你开一棵线段树,把高度>10的树扔进去,以位置为下标
对于删除,再开一棵线段树,把位置>10的树扔进去,以高度为下标
支持最大值
乱搞搞…

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#include<map>
#define LL long long
#define mp(x,y) make_pair(x,y)
#define lc now<<1
#define rc now<<1|1
using namespace std;
inline LL read()
{
	LL f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
inline void write(int x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
inline void pr1(int x){write(x);printf(" ");}
inline void pr2(int x){write(x);puts("");}

int tim;
struct ph
{
	int h,x;
	ph(){}
	ph(int _h,int _x){h=_h;x=_x;}
}w[200100];int v[200100];
bool cmp1(ph n1,ph n2){return n1.h<n2.h;}
bool cmp2(ph n1,ph n2){return n1.x<n2.x;}
ph li[200100];int pos;
int s[200100],f[200100],ln;
int lowbit(int x){return x&-x;}
void chpos(int x,int c){for(x;x<=200000;x+=lowbit(x))s[x]+=c;}
int findKth(int K)
{
	int now=0,sum=0;
	for(int i=18;i>=0;i--)
		if(now+(1<<i)<=200000&&sum+s[now+(1<<i)]<K)sum+=s[now+(1<<i)],now+=(1<<i);
	return now+1;
}
int mx[2][410000*4];
void modify(int now,int l,int r,int p,int c,int op)
{
	if(l==r){mx[op][now]=c;return ;}
	int mid=(l+r)/2;
	if(p<=mid)modify(lc,l,mid,p,c,op);
	else modify(rc,mid+1,r,p,c,op);
	mx[op][now]=max(mx[op][lc],mx[op][rc]);
}
int query(int now,int l,int r,int ql,int qr,int op)
{
	if(ql>qr)return 0;
	if(l==ql&&r==qr)return mx[op][now];
	int mid=(l+r)/2;
	if(qr<=mid)return query(lc,l,mid,ql,qr,op);
	else if(mid+1<=ql)return query(rc,mid+1,r,ql,qr,op);
	else
	{
		int t1=query(lc,l,mid,ql,mid,op);
		int t2=query(rc,mid+1,r,mid+1,qr,op);
		return max(t1,t2);
	}
}
int n,m;
int ans;
//第一个以位置为下标 高度>10扔进去 
//第二个以高度为下标 位置>10扔进去 
int a[200100];
int main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	n=read();m=read();
	
	for(int tt=1;tt<=m;tt++)
	{
		int opt=read(),p=read();
		int nw=0;sort(li+1,li+1+pos,cmp1);
		for(int i=1;i<=pos;i++)if(li[i].h+tt<=10)li[++nw]=li[i];
		pos=nw;
		if(opt==1)
		{
			int h=read();a[p]=h-tt+m;chpos(p,1);
			for(int i=1;i<=pos;i++)if(li[i].h+tt<h)modify(1,1,n,li[i].x,0,0),modify(1,1,n+m,li[i].h+m,0,1);
			int hh=query(1,1,n,p,n,0)+1;
			modify(1,1,n,p,hh,0);modify(1,1,n+m,h-tt+m,hh,1);
			sort(li+1,li+1+pos,cmp1);
			for(int i=pos;i>=1;i--)if(li[i].h+tt<h)
			{
				hh=query(1,1,n,li[i].x+1,n,0)+1;
				modify(1,1,n,li[i].x,hh,0);modify(1,1,n+m,li[i].h+m,hh,1);
			}li[++pos]=ph(h-tt,p);
		}
		else
		{
			for(int i=1;i<=p;i++)
			{
				int u=findKth(i);
				modify(1,1,n,u,0,0);modify(1,1,n+m,a[u],0,1);
			}
			int nw=0,u=findKth(p);a[u]=0;chpos(u,-1);
			for(int i=1;i<=pos;i++)if(li[i].x!=u)li[++nw]=li[i];
			pos=nw;
			for(int i=p-1;i>=1;i--)
			{
				u=findKth(i);int hh=query(1,1,n+m,a[u],n+m,1)+1;
				modify(1,1,n,u,hh,0);modify(1,1,n+m,a[u],hh,1);
			}
		}
		pr2(mx[0][1]);
	}
	return 0;
}
codeforces 线段树题单 线段树 阅读详情

相关推荐

线段树优化dp

线段树优化dp

Unlimitedz的博客 1255

【线段树模板以及Codeforces线段树专题总结】

线段树模板 //线段树一般用来解决可合并的区间问题 //树上维护子树区间的问题也可以通过dfs序+线段树去维护 //不要忘记build,dfs序问题build时注意下标 //数组记得开4倍,push_down一定要想好顺序 //对于每个问题,我们只要考虑清楚push_down和push_up的写法即可 //当问题不好处理的时候,想象一下对于单次询问暴力的做法,再进行区间操作 struct T { ...

lajiyuan的博客 4090

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 818

Codeforces Round 279 (Div. 2) F. Treeland Tour(线段树合并)

比如我们选了绿色子树,和紫色子树拼起来,我们有很多种方法可以选择,但本质上就是从一个子树中选最长上升子序列和另一个子树中选最长下降子序列拼起来。我们要想能将它们拼接起来,前提是最长上升子序列的结尾要比最长下降子序列的开头要小才可以。开的线段树维护的是整颗绿色子树的信息。开的线段树维护的是整颗紫色子树的信息。这样,我们的答案维护完的同时,线段树对整颗子树的信息也维护完了。号点为我们的子树,它们的信息在回溯到。,我们考虑将它的子树和其他子树拼起来。这样,我们也可以不重不漏的统计完答案。比如我们从随便选一个点。

田所浩二的博客 1230

IGS精密星历高效获取与解析指南

本文详细介绍了IGS精密星历在高精度定位中的核心作用,对比了IGS Final、IGR和IGU等不同产品的精度与时效性差异。指南提供了从武汉大学、NASA CDDIS等数据中心高效下载数据的实战方法,并深入解析了SP3文件格式,帮助用户掌握精密星历的获取、解析与自动化处理技巧,以支持厘米级定位应用。

garlic的博客 839

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.youkuaiyun.com/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2263

Codeforces Round #406 (Div. 1) B. Legacy(最短路+线段树优化建图)

但是即使是这样,还是会有很多建图的问题,每个虚拟节点复用率很低,一个虚拟节点只会与一部分节点相连,虚拟节点数多了之后,效率还不如普通的连边方法。可以发现我们这样建立新图的时,对于已经规定的路径,我们的所有节点都满足原图条件。至于连到哪一棵树的叶子,其实都无所谓,它们本质上就是一个节点,我个人习惯是出树叶子连入树叶子,不过有时候还要根据题意连边。这样子,单点向区间,或者区间向单点连边时候,我们只需要跑一下线段树,找到节点管辖的范围,然后连边就好了。这样子,我们的整个虚拟图,加上虚拟节点都建立好了。

田所浩二的博客 540

5G协议栈逆向工程:基于开源模拟器的核心网信令分析实战

本文详细介绍了基于开源模拟器Free5GC和UERANSIM的5G协议栈逆向工程实战,涵盖核心网信令分析、环境搭建、认证协议解析及安全漏洞验证。通过NGAP/NAS信令交互解密和异常流量注入测试,帮助研究人员深入理解5G网络安全机制,并提供实用的安全加固建议。

weixin_29250573的博客 678

Codeforces.264E.Roadside Trees(线段树 DP LIS)

题目链接 \(Description\) \(Solution\) 还是看代码好理解吧。 为了方便,我们将x坐标左右反转,再将所有高度取反,这样依然是维护从左到右的LIS,但是每次是在右边删除元素。 这样对于在p刚种的树,最多只有9棵树比它高,即它只会转移到这9棵树,除这9棵树外,它可以从1~p-1的任何树转移(其它9棵树除比它高的外 同样可以从它前面任何树转移)。 我们把这9棵树的DP值暴力删...

weixin_30751947的博客 191

手把手实战:RK3588上YOLOv8模型从训练到部署全流程解析

本文详细解析了在RK3588开发板上部署YOLOv8目标检测模型的全流程。从模型训练、正确导出适配的ONNX格式,到使用RKNN-Toolkit2进行模型转换与量化,最后在板卡上完成部署与性能测试。文章提供了完整的代码示例和关键避坑指南,帮助开发者高效实现嵌入式AI应用落地。

weixin_28224217的博客 407

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1966

codeforces 264E Roadside Trees

/* 看完题目:靠,这什么玩意儿?能做? 看完数据范围:靠,似乎还可作! */ 注意到hi 我们需要维护的是数组的最长上升序列。 dp[i]表示开头为i的最长上升序列 操作1      对于新增的i,一定是在其后的高度大于hi的树才能转移,而受到i影响的一定是i之前的高度小于hi的。维护一个线段树,以x为下标,dp为权值,支持区间求最大值。我们将高度大于10的全部树的

Zeyu_King的专栏 1163

2026工控高薪:C#上位机面试15题(含答案)

基础岗(10-15K):考察串口/Modbus/PLC通信基础;资深岗(20-30K):考察工业级优化(抗干扰/断线重连)、物联网(MQTT)、跨协议整合;架构岗(30K+):考察上位机架构设计、边缘计算、项目落地避坑。我整理了2026年近20场高薪岗位(月薪20K+)的面试高频题,筛选出15道核心题,每题标注“考察点+实战答案”——答案拒绝纯理论,全部结合车间现场、PLC通信、物联网落地等真实场景,帮你避开“背答案但不落地”的面试坑。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1284

贝叶斯网络实战:用Python从零构建一个扫雷AI(附完整代码)

本文通过Python实战案例,详细讲解如何利用贝叶斯网络构建扫雷AI,涵盖D-划分、贝叶斯球等核心概念的应用。从概率模型构建到推理算法实现(变量消元法和Gibbs采样),再到马尔科夫毯优化,提供完整代码帮助读者掌握概率图模型在游戏AI中的实际应用。

weixin_30823001的博客 308

SAP 系统间信任关系配置全攻略:从 SM59 到 SMT1 的实践与风险控制

本文介绍了在SAP系统间配置信任关系的详细流程与最佳实践。文章以SAP Gateway与后端系统架构为场景,从SM59创建RFC目的地开始,到SMT1建立信任关系,再到授权对象S_RFCACL的配置,提供了完整的操作指南。重点包括:使用标准命名规范创建专用RFC连接、通过向导完成系统间信任登记、严格控制S_RFCACL授权范围等。文中还分享了真实项目案例、可复用的检查清单以及常见问题的排查思路,帮助用户实现稳定可靠的跨系统无密码调用,同时确保安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 324

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Codeforces Round #665 (Div. 2) F. Reverse and Swap (线段树)

想想我们交换的本质是什么,如果我们交换了,我们本来要跑左儿子,那么我们交换后会跑到右儿子去,如果没交换,那就正常跑左儿子。的次幂,如果我们是用线段树进行维护的话,我们的线段树一定会形成一个满二叉树,树上的每个节点恰好就会代表一个。因为我们每一次是对当前层中的所有节点都执行了一次操作,显然复杂度不对。的区间执行交换操作,想想怎么让线段树维护这个操作。然后你在线段树上手摸一下操作,发现了一个神奇的结论。的线段树节点,交换左右两个儿子就可以了?的区间,那我们是不是可以让代表。的节点要不要交换左右儿子,我们用。

田所浩二的博客 270

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CF264E Roadside Trees (线段树+暴力)

qwq校内模拟赛的t3t3t3 t1t1t1贼自闭。 首先,我们来考虑如何更新一个点的LISLISLIS 一个比较naivenaivenaive的想法就是我们对于每个点记录以他为开头的的LISLISLIS长度。 如果我们选择用这个位置之后的所有位置的dpdpdp值+1来更新的话,貌似无法判断这个dpdpdp值对应的高度是不是合法的。 而我们如果选择用高度大于这个点的dp值+1dp值+1dp值+1来...

y_immortal的博客 QwQ(qdez_ymh) 438

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

线段树维护dp状态转移

传送门 题目描述 给长度为 n 的序列 a[],一个区间的得分为这个区间内有多少种元素恰出现一次。输出得分最大的区间,得分为多少。 分析 如果暴力枚举所有区间那么是N^2,需要考虑如何优化,可以根据区间得分的特点去思考。 设dp[l][r-1]为区间l~r-1的得分,那么dp[l][r]的得分有3种情况 dp[l][r]=dp[l][r−1]+1,第r个数没有在l∼r−1出现过 dp[l][r] = dp[l][r-1] + 1,第 r 个数没有在l \sim r - 1出现过 dp[l][r

RunningBeef的博客 412

Codeforces Round #826 (Div. 3)(D. Masha and a Beautiful Tree)线段树解法

那么 d==1 的地方一定是需要执行一次交换的点 ,加上 1 次即可,当L==R时,把当前值push 进一个数组里,代表排序后的顺序,最后再验证一遍顺序是否符合即可。题目大意:输入包 t ( 1 ≤ t ≤ 1e4 ) 组测试样例,每组样例先输入 m 大小的数组,构建一棵满二叉树。当序列本身就是一个升序序列时,每个节点的 d 都会是 0 ,也就是说如果你要询问每个点,一定是先找左子树再找右子树。我们在树的每个节点记录下区间的最小值 v 和 递归的方向 d。规定向左递归为 0,向右为 1。

Goring_fofo的博客 532

Codeforces Round #149 (Div. 2) E. XOR on Segment(拆位线段树)

首先,对区间操作,第一个想到线段树。但是朴素线段树并没办法维护区间异或的值,那怎么办呢?想到这一步之后就是套上树的模板,然后拆分二进制位分别维护就可以了。那么我们能否用线段树来维护某一个位上的异或值呢?那么我们就可以进行一些骚操作。的前四个二进制位为 [ 0, 0,这三个数,如果对它异或上一个。的前四个二进制位为 [ 0,的前四个二进制位为 [ 0,的前四个二进制位为 [ 0,的前四个二进制位为 [ 0,的前四个二进制位为 [ 0,的前四个二进制位为 [ 0,,加上的和就是最终的答案了。

田所浩二的博客 275

CodeForces - 1527E Partition Game(dp+线段树)

题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要将其划分成 kkk 段,使得贡献和最小 对于每段区间 [l,r][l,r][l,r] 的贡献为,其中每个数字,其最后一次出现的位置减去其首次出现的位置 输出最小贡献 题目分析:区间划分,经典的 dpdpdp 问题,dpi,jdp_{i,j}dpi,j​ 代表前 iii 个数划分为 jjj 个区间的最优解,两种转移方程: dpi,j=min(dpi−1,j+(ai属于上一段的贡献),dpi−1,j−1+(ai独成一段的贡献))dp_{i,

Falcon的博客 891

思维:线段树dp

https://ac.nowcoder.com/acm/contest/881/I 不得不说这题是真的难,看题解都差点没用理解。) 给定平面上若干(1e5)点,每个点ab两个权值,要求将其分为两组,a组的a权值和加b组的b权值和最大,划分条件转化一下就是,不能有a出现在b的右下,也就是要找到一条不降的折线,其上是a,其下是b。我们认为...

rgndao的博客 541

codeforces 1006 div3(A-F),洛谷线段树

题解:对于长度为n的数组,选择[l,r],将a[l]移到a[r]后面 ,要让逆序对数目尽可能少,观察可发现,如果移动后a[l]>a[r],显然逆序对数目会变多,而若a[l]<a[r],逆序对数目会减少,所以只要逆序对减少的越多越好,同时不断更新左右边界即可。题解:要重排字符串,找出满足哥布林脸的最大个数,显然‘-’要放两边,‘_'要放中间,因此先找到分别的对数,再乘上其余未配对的个数。//此时画图可以看出,当点都在一条线上时,对k的贡献最大,此时为(n*(n-1))/2;题解:由lucas定理可推出。

m0_68480741的博客 346

Man Down(线段树dp)

Man Down(线段树dp) 是男人就下100层的模拟,因为每个平台往左和往右的状态是确定的,这可以通过线段树的区间覆盖,单点查询求,然后就是从高往低dp。 时间复杂度:O(nlogn)O(nlogn)O(nlogn)​ 区间覆盖不需要lazt taglazt \ taglazt tag,换句话说a[x].colora[x].colora[x].color 就是lazy taglazy \ taglazy tag #include<bits/stdc++.h

Harris-H的博客 747

codeforces:E2. Array and Segments (Hard version)【线段树 + 区间修改】

线段树 + 全删逆向 + 剔除包含当前节点的所有区间的ls + rs算法。

小楼一夜听春雨 519
上一篇: [Codeforces301E][DP]Yaroslav and Arrangements
下一篇: [51nod1819][树链剖分]黑白树 V2
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值