HDU - 4348To the moon
【题目描述】

【题目分析】
题目中说明每次更新后时间都会加1,而且还会需要查询以前的区间,还会需要返回以前的时间,所以是很裸的主席树。区间查询的话我们同样需要用到lazy标记
通过这道题我发现线段树的操作还是很灵活的
借鉴大佬的代码
【AC代码】

#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;typedef long long ll;const int MAXN=100005;
int n,m,Time;
ll a[MAXN];
struct node
{int ls,rs;ll sum,add;
}tree[MAXN*40];
int root[MAXN*40];
int tot;
void build(int &o,int l,int r)
{o=++tot;tree[o].add=0;if(l==r){tree[o].sum=a[l];return;}int mid=(l+r)>>1;build(tree[o].ls,l,mid);build(tree[o].rs,mid+1,r);tree[o].sum=tree[tree[o].ls].sum+tree[tree[o].rs].sum;
}void interval_add(int &x,int l,int r,int L,int R,ll z)
{tree[++tot]=tree[x]; x=tot;tree[x].sum+=z*(R-L+1);  //相当于pushupif(l==L && r==R){tree[x].add+=z;return;}int mid=(l+r)>>1;if(R<=mid) interval_add(tree[x].ls,l,mid,L,R,z);//这里通过判断让L,R属于l..mid,方便上面的pushupelse if(L>mid) interval_add(tree[x].rs,mid+1,r,L,R,z);else{interval_add(tree[x].ls,l,mid,L,mid,z);interval_add(tree[x].rs,mid+1,r,mid+1,R,z);}
}ll query(int o,int l,int r,int L,int R)
{if(l>=L && r<=R){return tree[o].sum;}ll ret=tree[o].add*(R-L+1); //pushdown,这里的pushdown没有将标记下传,而是将lazy标记保留,询问的时候依次将路径上的lazy标记加起来int mid=(l+r)>>1;if(R<=mid) ret+=query(tree[o].ls,l,mid,L,R);else if(L>mid) ret+=query(tree[o].rs,mid+1,r,L,R);else{ret+=query(tree[o].ls,l,mid,L,mid);ret+=query(tree[o].rs,mid+1,r,mid+1,R);}return ret;
}int main()
{char cmd[5];int l,r,t;ll d;while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}tot=0; Time=0;build(root[0],1,n);for(int i=0;i<m;i++){scanf("%s",cmd);if(cmd[0]=='C'){scanf("%d%d%lld",&l,&r,&d);Time++;root[Time]=root[Time-1];interval_add(root[Time],1,n,l,r,d);}else if(cmd[0]=='Q'){scanf("%d%d",&l,&r);printf("%lld\n",query(root[Time],1,n,l,r));}else if(cmd[0]=='H'){scanf("%d%d%d",&l,&r,&t);printf("%lld\n",query(root[t],1,n,l,r));}else if(cmd[0]=='B'){scanf("%d",&t);Time=t;}}}return 0;
}

HDU - 4348To the moon——主席树+区间修改相关推荐

  1. HDU 4348 To the moon(主席树区间修改)

    题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...

  2. HDU - 4348 To the moon(主席树区间更新-标记永久化)

    题目链接:点击查看 题目大意:给出一个初始时长度为 n 的序列,有 m 次操作,每种操作分为下列四种类型: C l r d:新建一个继承了前一个版本的数组,并将区间 [ l , r ] 内的数字都加上 ...

  3. HDU - 5919 Sequence II——主席树+区间种类++逆序建树

    [题目描述] HDU - 5919 Sequence II [题目分析] 题目给定一个数组,每次查询一个区间,找出区间内不同数字的个数x,然后输出按出现顺序第x/2向上取整个数字的位置. 按照要求,我 ...

  4. 【模板】线段树区间修改

    区间修改: 区间修改过程类似于区间询问,例如将[ul, ur]内的所有元素都加上v,则进行如下操作: 当当前区间被区间[ul, ur]所包含时, 当前的节点值加上区间长度(r - l  + 1)乘以v ...

  5. python:线段树区间修改 + 区间查询 模板 + 坑点总结

    from functools import reduceclass SegTree:'''支持增量更新,覆盖更新,序列更新,任意RMQ操作基于二叉树实现初始化:O(1)增量更新或覆盖更新的单次操作复杂 ...

  6. hdu 4348 To the moon (主席树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...

  7. hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)

    题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...

  8. HDU 1698 Just a Hook (线段树区间修改+区间查询)

    题目链接: 传送门 题意:Pudge对装备钩子进行若干次的强化,强化分为三种分别对应的价值是1,2,3,在经历过若干次操作后,输出钩子对应的总价值,每次强化都是对钩子进行区间修改 解题思路:在明白了题 ...

  9. hdu 1698 Just a Hook(线段树区间修改)

    传送门:Just a Hook Problem Description In the game of DotA, Pudge's meat hook is actually the most horr ...

最新文章

  1. java如何监控cpu耗时_超级干货:3个性能监控和优化命令讲解
  2. 步入DevExpress的使用(VS)
  3. [蓝桥杯][2018年第九届真题]小朋友崇拜圈(简单图论)
  4. CF1119G. Get Ready for the Battle
  5. 前端现在有发展前途吗?应届生好找工作吗?
  6. C++从文件中查找特定的字符串,并提取该字符串
  7. Linux平台kafaka安装及使用
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream...
  9. 自动驾驶7-4 自动驾驶汽车简介全面总结 Congratulations on Completing Course 1
  10. Android:LayoutInflater(布局服务)的 简单介绍 使用方法解析
  11. 【求职面试】面试中 HR 经常问到什么样的问题?赶紧看一看!
  12. S7-200SMART 模拟量间接寻址 批量处理
  13. 第16章 调色盘管理器
  14. 法律纠纷信息检索(爬虫)
  15. 去除IntelliJ IDEA中重复代码报灰黄色下划波浪线
  16. cad怎么画坐标系箭头_怎样用CAD画一个路标箭头?,来学习吧
  17. J-LINK使用问题汇总
  18. C语言指针关键知识点总结
  19. 大意是没有经历过贫穷的人,很难成为优秀的人才。
  20. 字符串指针与字符串数组

热门文章

  1. python中+=和=+的区别
  2. Struts2中数据封装方式
  3. 做一件事情的3个关键指标:兴趣、能力和回报
  4. 一个把图片保存到SQL数据库的工具
  5. php session 效率,大量php session临时文件带来的服务器效率问题
  6. 为什么用链路聚合_H3C ComwareV7平台网络设备可靠性配置——链路聚合
  7. django1.5 连接mysql_django1.5.5使用mysql
  8. cordova监听事件中调用其他方法_Laravel模型事件的实现原理详解
  9. C语言程序设计孙家啸第一版,广东年月自考各专业课程使用教材.doc
  10. mac vs 返回上一步_mac电脑打不开应用程序的解决方法