【线段树】洛谷 P3372 【模板】线段树 1
动态开结点线段树板子。
#include<cstdio>
using namespace std;
typedef long long ll;
ll sumv[400005],delta[400005];
int lc[400005],rc[400005],tot,root;
void newnode(int &rt){
rt=++tot;
lc[rt]=rc[rt]=0;
sumv[rt]=delta[rt]=0;
}
void buildtree(int &rt,int l,int r){
if(!rt){
newnode(rt);
}
if(l==r){
scanf("%I64d",&sumv[rt]);
return;
}
int m=(l+r>>1);
buildtree(lc[rt],l,m);
buildtree(rc[rt],m+1,r);
sumv[rt]=sumv[lc[rt]]+sumv[rc[rt]];
}
void pushdown(int rt,int size)
{
if(!lc[rt]){
newnode(lc[rt]);
}
if(!rc[rt]){
newnode(rc[rt]);
}
if(delta[rt]){
delta[lc[rt]]+=delta[rt];
delta[rc[rt]]+=delta[rt];
sumv[lc[rt]]+=delta[rt]*(ll)(size-(size>>1));
sumv[rc[rt]]+=delta[rt]*(ll)(size>>1);
delta[rt]=0;
}
}
void update(int ql,int qr,ll v,int &rt,int l,int r){
if(!rt){
newnode(rt);
}
if(ql<=l && r<=qr){
delta[rt]+=v;
sumv[rt]+=v*(ll)(r-l+1);
return;
}
pushdown(rt,r-l+1);
int m=(l+r>>1);
if(ql<=m){
update(ql,qr,v,lc[rt],l,m);
}
if(m<qr){
update(ql,qr,v,rc[rt],m+1,r);
}
sumv[rt]=sumv[lc[rt]]+sumv[rc[rt]];
}
ll query(int ql,int qr,int rt,int l,int r){
if(!rt){
return 0;
}
if(ql<=l && r<=qr){
return sumv[rt];
}
pushdown(rt,r-l+1);
int m=(l+r>>1);
ll res=0;
if(ql<=m){
res+=query(ql,qr,lc[rt],l,m);
}
if(m<qr){
res+=query(ql,qr,rc[rt],m+1,r);
}
return res;
}
int n,m;
int main(){
int op,x,y;
ll z;
// freopen("luogu3372.in","r",stdin);
scanf("%d%d",&n,&m);
buildtree(root,1,n);
for(int i=1;i<=m;++i){
scanf("%d%d%d",&op,&x,&y);
if(op==1){
scanf("%lld",&z);
update(x,y,z,root,1,n);
}
else{
printf("%lld\n",query(x,y,root,1,n));
}
}
return 0;
}
【线段树】洛谷 P3372 【模板】线段树 1的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)
洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...
- 【BZOJ2830/洛谷3830】随机树(动态规划)
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度 ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...
- 线段树入门详解,洛谷P3372 【模板】线段树 1
关于线段树: 本随笔参考例题 P3372 [模板]线段树 1 所谓线段树就是把一串数组拆分成一个一个线段形成的一棵树. 比如说像这样的一个数组1,2,3,4,5: 1 ~ 5 / ...
- 洛谷P3372线段树1
难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...
- 洛谷P3834 [模板]可持久化线段树1(主席树) [主席树]
题目传送门 可持久化线段树1(主席树) 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定 ...
- 洛谷P4114 Qtree1(树链剖分+线段树)
传送门 LCT秒天秒地用什么树剖 这题可以算是树剖的比较裸的题目了 把每一条边的权值下放到他两边的点中深度较深的那个 然后直接用树剖+线段树带进去乱搞就可以了 //minamoto #include& ...
- 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树 ...
- 洛谷P3374(线段树)(询问区间和,支持单点修改)
洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...
随机推荐
- PAT L2-017. 人以群分
题目链接:https://www.patest.cn/contests/gplt/L2-017 题目: 社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(out ...
- typeof的用法
typeof可以返回变量的类型,返回值为字符串,其值有 "undefined" "boolean" "string" "numbe ...
- 树莓派开启smb
1.安装smb apt-get install samba samba-common-bin 2.修改/etc/samba/smb.conf配置 设置使用系统用户登入 增加smb访问文件夹 [shar ...
- [Leetcode Week16]Range Sum Query - Mutable
Range Sum Query - Mutable 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/range-sum-query-mutable/de ...
- 函数导出在kvm_intel.ko,kvm.ko不共享
KVM一共包含了三个内核模块,kvm_intel.ko,kvm_amd.ko,kvm.ko.其中两个重要文件x86.c和vmx.c在编译后分别会生成kvm_intel.ko和kvm.ko两个内核模块, ...
- python基础===jieba模块,Python 中文分词组件
api参考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安装自行百度 基本用法: import jieba #全模式 word = j ...
- 自己动手一步步安装Linux系统
自己动手一步步安装Linux系统 http://502245466.blog.51cto.com/7559397/1291910/
- 【常见的SQL Server连接失败错误以及解决方法】
[常见的SQL Server连接失败错误以及解决方法] http://blog.csdn.net/feixianxxx/article/details/5523922 ADO连接SQL Server ...
- Django2.0如何配置urls文件
刚开始学django,创建的第一个工程无法启动,后来发现是由于教程是针对较低版本的Django,我用的是Django2.0和Python3.6,两个都是发文为止的最新版本,urls文件设置方法和旧版本 ...
- 【数位dp入门】【HDU2089】62
为了我的点歪的技能树…… 所以开始补一些sb的东西…… #include<bits/stdc++.h> typedef long long ll; using namespace std; ...