uoj #218.【UNR #1】火车管理 可持久化线段树

题意

有n个栈,现在要资瓷以下操作:
1 l r询问编号在[l,r]之间的栈的栈顶的和
2 l对编号为l的栈进行一次pop操作
3 l r x对编号在[l,r]之间的栈进行一次push(x)操作
n,q500000 n , q ≤ 500000

分析

这题的extra test卡空间真的是丧心病狂,在卡空间的时候还出现了同一个程序有时可以跑有时会re的神奇情况,简直不能再爽。
这题的话,用一棵线段树来维护答案和每个位置当前的栈顶是什么时候push进来的,再用一棵可持久化线段树来维护每个操作后每个点往前第一个覆盖到它的操作是哪个。
询问就直接在答案线段树上询问,修改操作就分别在两棵线段树上改一下,就做完了。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>

const int N=500005;

int n,m,ty,sz,rt[N],root,w[N],tot,u,v,z;
struct tree{
  int l,r,s,tag;}t[N*140];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值