当前位置: 首页 > news >正文

洛谷P3372 线段树

板子题,但也是我写的(抄的)第一道线段树的题。 

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int a[N];
ll d[N<<2],lazy[N<<2];void build(int l,int r,int p)//build tree
{if(l==r){d[p]=a[l];return;}int m=l+((r-l)>>1);build(l,m,p<<1),build(m+1,r,(p<<1)|1);d[p]=d[p<<1]+d[(p<<1)|1];
}void update(int l,int r,int s,int e,int x,int p)
{if(l<=s&&r>=e){d[p]+=(e-s+1)*x,lazy[p]+=x;return;}int m=s+((e-s)>>1);if(lazy[p]){d[p<<1]+=(m-s+1)*lazy[p];d[(p<<1)|1]+=(e-m)*lazy[p];lazy[p<<1]+=lazy[p];lazy[(p<<1)|1]+=lazy[p];lazy[p]=0;}if(l<=m) update(l,r,s,m,x,p<<1);if(r>m) update(l,r,m+1,e,x,(p<<1)|1);d[p]=d[p<<1]+d[(p<<1)|1];
}ll getsum(int l,int r,int s,int e,int p)
{if(l<=s&&r>=e)return d[p];int m=s+((e-s)>>1);ll res=0;if(lazy[p]){d[p<<1]+=(m-s+1)*lazy[p];d[(p<<1)|1]+=(e-m)*lazy[p];lazy[p<<1]+=lazy[p];lazy[(p<<1)|1]+=lazy[p];lazy[p]=0;}if(l<=m) res+=getsum(l,r,s,m,p<<1);if(r>m) res+=getsum(l,r,m+1,e,(p<<1)|1);return res;
}int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];build(1,n,1);while(m--){int op;cin>>op;if(op==1){int l,r,x;cin>>l>>r>>x;update(l,r,1,n,x,1);}else{int l,r;cin>>l>>r;cout<<getsum(l,r,1,n,1)<<'\n';}}return 0;
}

几乎是照着别人的敲的,但是也没事,懂了就行。

相关文章:

  • Linux的一些基本指令
  • #微信小程序:微信小程序常见的配置传值
  • electron-builder打包
  • mysql体系结构及主要文件
  • python 笔记:locals
  • python笔记基础--类(6)
  • 洛谷day3
  • Redis是如何避免“数组+链表”的过长问题
  • React【Day1】
  • 【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件
  • [激光原理与应用-78]:激光加工(如打标)的各种笔参数与含义解读
  • MCGS学习——用户管理
  • XUbuntu22.04之安装Plantuml(二百二十三)
  • Camera入门基础知识
  • UGUI源码分析与研究2-从底层实现的角度去分析和调优UI的性能问题和疑难杂症
  • 【RocksDB】TransactionDB源码分析
  • 【翻译】babel对TC39装饰器草案的实现
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • ECMAScript入门(七)--Module语法
  • egg(89)--egg之redis的发布和订阅
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • JavaScript创建对象的四种方式
  • Java的Interrupt与线程中断
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Redis的resp协议
  • Redis学习笔记 - pipline(流水线、管道)
  • Solarized Scheme
  • 飞驰在Mesos的涡轮引擎上
  • 浏览器缓存机制分析
  • 普通函数和构造函数的区别
  • 入门到放弃node系列之Hello Word篇
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序开发之路(一)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 转载:[译] 内容加速黑科技趣谈
  • kubernetes资源对象--ingress
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #162 (Div. 2)
  • #include
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET MVC第三章、三种传值方式
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET牛人应该知道些什么(2):中级.NET开发人员