大视野在线测评 1500 [NOI2005]维修数列(splay)

这篇博客介绍了如何使用Splay树来解决NOI2005竞赛中关于数列维护的问题,包括GET-SUM、MAX-SUM等操作。通过伸展特定节点,实现区间操作的高效处理,并给出了插入、删除、求区间和及最大连续子区间和的策略。代码实现附在文中。
摘要由CSDN通过智能技术生成

题目链接

1500: [NOI2005]维修数列

Time Limit: 10 Sec   Memory Limit: 64 MB
Submit: 8379   Solved: 2521
[ Submit][ Status][ Discuss]

Description

Input

输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目。第2行包含N个数字,描述初始时的数列。以下M行,每行一条命令,格式参见问题描述中的表格。

Output

对于输入数据中的GET-SUM和MAX-SUM操作,向输出文件依次打印结果,每个答案(数字)占一行。

Sample Input

9 8
2 -6 3 5 1 -5 -3 6 3
GET-SUM 5 4
MAX-SUM
INSERT 8 3 -5 7 2
DELETE 12 1
MAKE-SAME 3 3 2
REVERSE 3 6
GET-SUM 5 4
MAX-SUM

Sample Output

-1
10
1
10

HINT

Source

题解:要操作区间 [ L,R ] 。把第L-1个点伸展的根,把第R+1个点伸展到根下面,那么第R+1个点的左子树就是区间[ L , R ] 。跟线段树区间操作类似,对区间打上延时标记即可。

对于插入操作来说,先将插入序列建成一个完全二叉树,然后再插入对应位置即可

对于删除操作来说,先将对应区间伸展出来,删除即可

对于询问区间和,我们维护每个子树的和

对于询问最大连续子区间来说,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值