线段树写得很少,这么基本的算法还是要会的……

#include<bits/stdc++.h>
using namespace std;
inline long long read() {
long long x = , f = ; char ch = getchar();
while (ch<'' || ch>'') { if (ch == '-') f = -;ch = getchar(); }
while (ch >= ''&&ch <= '') { x = x * + ch - '';ch = getchar(); }
return x*f;
}
const int maxn = ;
int n,m,op,_l,_r,k;
struct NODE{
int l,r;
long long lazy,val;
}node[maxn<<];
void pushup(int rt){
node[rt].val = node[rt<<].val+node[rt<<|].val;
}
void pushdown(int rt){
if(!node[rt].lazy) return ;
int mid = node[rt].l+node[rt].r >>;
node[rt<<].lazy += node[rt].lazy;
node[rt<<|].lazy += node[rt].lazy;
node[rt<<].val += node[rt].lazy*(mid-node[rt].l+);
node[rt<<|].val += node[rt].lazy*(node[rt].r-mid);
node[rt].lazy = ; }
void build(int x,int l,int r){
if((node[x].l = l) == (node[x].r = r)) return;
int mid = node[x].l+node[x].r>>;
build(x<<,l,mid),build(x<<|,mid+,r);
}
//单点更新
void add_one(int rt,int pos,long long val){
if(node[rt].l == node[rt].r){
node[rt].val+=val;
return;
}
int mid = node[rt].l+node[rt].r>>;
add_one(rt<<|pos>mid,pos,val);
pushup(rt);
}
//区域更新
//所谓lazy就是只有当需要pushdown时才pushdown,query同
void add(int rt,int l,int r,int val){
pushdown(rt); // 这一行的作用见 https://jecvay.com/2014/11/segment-tree-lazy-design.html
if(node[rt].l>=l && node[rt].r<=r){
node[rt].val+=val*(node[rt].r-node[rt].l+);
node[rt].lazy += val;
return ;
}
int mid = node[rt].l+node[rt].r>>;
if(l<=mid) add(rt<<,l,r,val);
if(r>mid) add(rt<<|,l,r,val);
pushup(rt);
}
long long query(int rt,int l,int r){
pushdown(rt);
if(node[rt].l>=l && node[rt].r<=r) return node[rt].val;
int mid = node[rt].l + node[rt].r >> ;
long long ans = ;
if(l<=mid) ans+=query(rt<<,l,r); // 易错
if(r>mid) ans+=query(rt<<|,l,r);
return ans;
}
int main(){
n = read(), m = read();
build(,,n);
for(int i = ;i<n;i++) add_one(,i,read());
for(int i = ;i<m;i++){
op = read();_l = read()-; _r = read()-;
if(op-) printf("%lld\n",query(,_l,_r));
else{
k = read();
add(,_l,_r,k);
}
}
return ;
}

线段树lazy模板 luogu3372的更多相关文章

  1. JuQueen(线段树 lazy)

    JuQueen Time Limit: 5 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...

  2. 分块+lazy 或者 线段树+lazy Codeforces Round #254 (Div. 2) E

    E. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. POJ 2777——线段树Lazy的重要性

    POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...

  4. poj 3237 树链剖分模板(用到线段树lazy操作)

    /* 本体在spoj375的基础上加了一些操作,用到线段树的lazy操作模板类型 */ #include<stdio.h> #include<string.h> #includ ...

  5. HDU 3954 Level up(多颗线段树+lazy操作)

    又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...

  6. 矩形面积并-扫描线 线段树 离散化 模板-poj1151 hdu1542

    今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记, ...

  7. 线段树--线段树【模板1】P3372

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

  8. BZOJ-1036 树的统计Count 链剖线段树(模板)=(树链剖分+线段树)

    潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Lim ...

  9. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

随机推荐

  1. LeetCode_122. Best Time to Buy and Sell Stock II

    122. Best Time to Buy and Sell Stock II Easy Say you have an array for which the ith element is the ...

  2. 【Leetcode_easy】1108. Defanging an IP Address

    problem 1108. Defanging an IP Address solution: class Solution { public: string defangIPaddr(string ...

  3. 解决kalilinux:“下列签名无效: KEYEXPIRED 1425567400"

    Kali linux由于太长时间未更新,而出现GPG错误 KEYEXPIRED 1425567400.经检查源未出现问题可以解析,deb也不冲突,就是密钥过期了. 解决方式 使用一条命令,添加新的密钥 ...

  4. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...

  5. 【长期更新】Leetcode刷题心得与思考

    1.递归与动态规划的思考 Leetcode第95题 递归问题最重要的问题是想明白函数的作用是什么? 这个例子中函数的返回值就是给定a-b这个区间的数字,返回它所有可能的Tree,此时你不需要明白具体怎 ...

  6. Haar-like特征来龙去脉

    Haar-like特征来龙去脉 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ haar-like特征概念 haar-like特征是是计算机视觉领域一种常用的 ...

  7. Andrew Ng机器学习课程12

    Andrew Ng机器学习课程12 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言:主要讲述了batch learning和online learnin ...

  8. eNSP——STP配置和选路规则

    原理: STP是用来避免数据链路层出现逻辑环路的协议,使用BPDU传递网络信息计算出一根无环的树状网络结构,并阻塞特定端口. 在网络出现故障的时候,STP能快速发现链路故障,并尽快找出另外一条路径进行 ...

  9. jqGrid刷新不取消选中

    也就是说,刷新前选中的行,刷新后还是选中 var jqGrid = $("#jqGrid"); // 获取刷新前选中的行id var jqGridRowid=jqGrid.jqGr ...

  10. Airflow怎么删除系统自带的DAG任务

    点击这个按钮 找到dag文件所在路径,并进入路径将其文件删除即可