线段树练习飘逸的写法,自从自己改成这样的写法之后,线段树就没再练过,如今最终练得上了。

由于这里查询仅仅是查询了叶子结点,所以pushUp函数就用不上了,只是我没去掉之前是3ms。去掉之后反而变成4ms了,搞不懂怎么原因,没用到,去掉之后应该更快才对啊,居然变慢了,真搞不明确?

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define sc(a,b) scanf("%d%d",&a,&b)
#define pri(a) printf("%d\n",a)
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define MM 100004
#define MN 1008
#define INF 2000000000
#define eps 1e-8
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
int sum[MM],val[MM];
//void pushUp(int i)
//{
//    sum[i]=sum[i<<1]+sum[i<<1|1];
//}
void pushDown(int i) //处理lazy标记
{if(val[i]){val[i<<1]+=val[i],val[i<<1|1]+=val[i];sum[i<<1]+=val[i],sum[i<<1|1]+=val[i];val[i]=0;}
}
void build(int i,int l,int r)
{sum[i]=val[i]=0;if(l==r) return ;int mid=(l+r)>>1;build(lson),build(rson);
}
void update(int i,int l,int r,int L,int R,int v)
{if(L<=l&&r<=R){val[i]+=v;sum[i]+=v;return ;}int mid=(l+r)>>1;pushDown(i);if(L<=mid) update(lson,L,R,v);if(R>mid) update(rson,L,R,v);//pushUp(i);
}
int query(int i,int l,int r,int x)
{if(l==x&&r==x) return sum[i];int mid=(l+r)>>1;pushDown(i);if(x<=mid) return query(lson,x);else return query(rson,x);
}
int main()
{int n,q,mm,i,a,b,s;sca(n);build(1,1,n);for(i=1;i<=n;i++){sca(a);update(1,1,n,i,i,a);}sca(q);while(q--){sca(mm);if(mm==1){scanf("%d%d%d",&a,&b,&s);update(1,1,n,a,b,s);}else{sca(s);pri(query(1,1,n,s));}}return 0;
}

Wikioi 1081 线段树成段更新单点查询相关推荐

  1. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  2. HDOJ 1698 Just a Hook(线段树成段更新)

    题意: 屠夫的钩子区间是1~n,每段可能由铜,银,金组成,价值分别为1,2,3,进行一系列的更新之后,求钩子的总价值. 思路: 线段树的成段更新:要设置一个临时的线段树,每次更新的时候把更新段的值放在 ...

  3. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)

    题意:给定点的上下级关系,规定假设给i分配任务a.那么他的全部下属.都停下手上的工作,開始做a. 操作 T x y 分配x任务y,C x询问x的当前任务: Sample Input 1 5 4 3 3 ...

  4. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)

    和普通的线段树不同的是,查询x~y的话,给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍. 思路的话,就是关于query和pushup的方法.用一个新的变量sum记录一下这个区间里面按 ...

  5. HDU 6203 ping ping ping lca 线段树成段更新

    题目链接:HDU 6203 ping ping ping Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  6. 【HDU - 3974】 Assign the task (dfs序 + 线段树维护 区间更新+ 单点查询)

    题干: There is a company that has N employees(numbered from 1 to N),every employee in the company has ...

  7. POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

    用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468   User: qq1203456195 Memory: 4284 ...

  8. HDU 3397 Sequence operation 线段树 成段更新 区间合并

    比较综合的题. 两个标记  setv,xorr.setv的优先级高于xorr,当一个节点获得一个setv时,他之前的xorr要清除. //#pragma comment(linker, "/ ...

  9. hdu 1698 线段树成段更新

    这么重要的数据结构还是得学啊.仿notonlysuccess的代码风格 #include <cstdio> #include <algorithm> #include < ...

最新文章

  1. 系列文章|OKR与敏捷(二):实现全栈敏捷
  2. 知乎热议:高数、线代应该成为计算机专业学习的重心吗?
  3. linux环境搭建seafile客户端自动上传文件
  4. C++文件操作:fopen / fread / fwrite
  5. 解决开机POST提示Strike tne F1 key to continue,F2 to run the setup utility
  6. 《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习
  7. java嵌套类型 无法隐藏外层类型_java内部类深入详解 内部类的分类 特点 定义方式 使用...
  8. 机器学习 | 分类评估指标
  9. Data-Driven Geometry Processing 3D Deep Learning
  10. X86 “将死“?RISC-V 正当立
  11. Linux内核开发_将Linux内核打包成img文件
  12. VS Code快捷生成用户代码片段操作,以vue为例
  13. 氨基酸英文表示及缩写
  14. Mac安装/卸载brew
  15. 交叉验证stratified k-fold cv与shuffle等常用cv方法
  16. Python是什么意思?一篇文章给你讲清楚!
  17. 51单片机驱动ds12887c语言,DS12887(时钟日历芯片) c语言驱动程序
  18. Spring Boot多数据源配置并通过注解实现动态切换数据源
  19. Office2016、visio2016安装的注意事项
  20. 共模扼流圈的工作原理与作用以及特点和应用详解

热门文章

  1. 架构畅想:如果以你所会去进行架构,会到哪一步?
  2. NSubstitute完全手册(八)替换返回值
  3. php不能显示验证码
  4. Image、Byte[]、Bitmap相互转换
  5. 认清SQL_Server_2005的基于行版本控制的两种隔离级别
  6. LinuxIP设置,网络负载
  7. gephi java教程_Gephi的使用--以社交网络图为例
  8. OAauth2.0包括以下角
  9. 序列化技术的选型-选型建议
  10. 手写自己的MyBatis框架-V2.0结果集处理