十年OI一场空,不开long long见祖宗
//线段树:单点修改+区间求和
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
ll n,m,a[1000010],ans[2000010],tag[2000010];
ll ls(ll x) { return x<<1; }
ll rs(ll x) { return x<<1|1; }
void lazy(ll k,ll l,ll r,ll plus)
{
tag[k]+=plus;
ans[k]+=plus*(r-l+1);
}
void push_up(ll k) { ans[k]=ans[ls(k)]+ans[rs(k)]; }
void push_down(ll k,ll l,ll r)
{
ll mid=(l+r)>>1;
lazy(ls(k),l,mid,tag[k]);
lazy(rs(k),mid+1,r,tag[k]);
tag[k]=0;
}
void build(ll k,ll l,ll r)
{
tag[k]=0;
if(l==r)
{
ans[k]=a[l];
return;
}
ll mid=(l+r)>>1;
build(ls(k),l,mid);
build(rs(k),mid+1,r);
push_up(k);
}
void up_date(ll x,ll y,ll l,ll r,ll k,ll plus)//插入
{
if(x<=l&&r<=y)
{
ans[k]+=plus*(r-l+1);
tag[k]+=plus;
return;
}
push_down(k,l,r);
ll mid=(l+r)>>1;
if(x<=mid) up_date(x,y,l,mid,ls(k),plus);
if(y>mid) up_date(x,y,mid+1,r,rs(k),plus);
push_up(k);//回溯
}
ll query(ll x,ll y,ll l,ll r,ll k)//查询
{
ll res=0;
if(x<=l&&y>=r) return ans[k];
ll mid=(l+r)>>1;
push_down(k,l,r);
if(x<=mid) res+=query(x,y,l,mid,ls(k));
if(y>mid) res+=query(x,y,mid+1,r,rs(k));
return res;
}
int main()
{
ll a1,b,c,d,e,f;
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
build(1,1,n);
while(m--)
{
scanf("%lld",&a1);
if(a1==1)
{
scanf("%lld%lld%lld",&b,&c,&d);
up_date(b,c,1,n,1,d);
}
else{
scanf("%lld%lld",&e,&f);
printf("%lld\n",query(e,f,1,n,1));
}
}
return 0;
}
十年OI一场空,不开long long见祖宗的更多相关文章
- SpringBoot | 第十八章:web应用开发之WebJars使用
前言 前面一章节我们主要讲解了关于文件上传的两种方式.本章节继续web开发的相关知识点.通常对于web开发而言,像js.css.images等静态资源版本管理是比较混乱的,比如Jquery.Boots ...
- 阿里技术专家十五问,真题面试刀刀见肉,快来和阿里面试官battle
引言 2020阿里巴巴专家组出题,等你来答: 题目:如何判断两个链表是否相交 出题人:阿里巴巴新零售技术质量部 参考答案: $O(n^2)$: 两层遍历,总能发现是否相交 $O(n)$: 一层遍历,遍 ...
- #助力CSP2019# OI中容易出现的**错误汇总
多测不清空,爆0两行泪 3年OI一场空,不开long long见祖宗 线段树空间需要开4倍 读入有负数的时候,如果要写快读,要识别负号 持续更新
- 「浙江理工大学ACM入队200题系列」问题 L: 零基础学C/C++52——计算数列和2/1,3/2,5/3,8/5......
本题是浙江理工大学ACM入队200题第五套中的L题 我们先来看一下这题的题面. 题面 题目描述 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,-- 计算这个数列的前n项和.注意: ...
- 洛谷 P1440 求m区间内的最小值(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1440 显然是一道单调队列题目…… 解题思路 对于单调队列不明白的请看这一篇博客:https://www.cn ...
- 【数论分块】[BZOJ2956、LuoguP2260] 模积和
十年OI一场空,忘记取模见祖宗 题目: 求$$\sum_{i=1}^{n}\sum_{j=1}^{m} (n \bmod i)(m \bmod i)$$ (其中i,j不相等) 暴力拆式子: $$ANS ...
- 牛客CSP-S提高组赛前集训营4 赛后总结
复读数组 分成 3 种区间算答案: 一个块内的区间 两个块交界处,长度小于块长的区间 长度不小于块长的区间 对于第三种区间,容易发现每个区间的权值一样,只需要算出个数即可. 对于前两种空间,我的思路是 ...
- $SCOJ4427 Miss Zhao's Graph$
\(problem\) 给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增. 图中可能有重边和自环. \(题意非常简单:n个点 m个带权边 最多能连成多少条边\) ...
- noip2018——题解&总结
近期正在疯狂复习某些东西,这篇博客尽量年底更完……(Day2T2除外) 好了,所有的希望都破灭了,原来这就是出题人的素质.——一个被欺骗的可怜 $OIer$ 人生中倒数第三次 $noip$ (Mayb ...
随机推荐
- mybatis-plus中查询出的字段为空
数据查询出后其中几个字段为null 解决方法: 数据库的字段命名方式为使用下划线连接,对应的实体类应该是驼峰命名方式,而我使用的是和数据库同样的命名方式. 所以mybatis-plus映射不到,修改实 ...
- 第10组 Alpha冲刺 (2/6)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/ ·作业博客:https://edu.cnblogs.com/campus/fzu/FZ ...
- 经典变长指令-ModRM
一.如何计算ModRM 0X88 MOV Eb,Gb G:通用寄存器 0X89 MOV Ev,Gv E:寄存器/内存 0X8A MOV Gb,Eb b:字节 0X8B MOV Gv,Ev v:Word ...
- Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- linux下玩转磁盘管理与挂载硬盘
前言 本文将带来linux下的磁盘管理中的硬盘挂载,Linux操作系统挂载硬盘需要了解的一些知识.这可能是迄今为止介绍的最最最实用的linux硬盘挂载的文章了,比较详细.由于工作原因,平时使用的比较多 ...
- leetcode 1541. 平衡括号字符串的最少插入次数
问题描述 给你一个括号字符串 s ,它只包含字符 '(' 和 ')' .一个括号字符串被称为平衡的当它满足: 任何左括号 '(' 必须对应两个连续的右括号 '))' . 左括号 '(' 必须在对应的连 ...
- Pyomo+GLPK使用
Pyomo下载安装 GLPK的下载和安装参考上一篇博客. mkdir Pyomo cd Pyomo wget https://github.com/Pyomo/pyomo/archive/5.6.6. ...
- 【数学】立个flag
想写一个叫做<机器学习中的数学基础>系列文章
- VS IDE之xml过大报错
语料处理时遇到这个错误 在命令行中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual Studio\ ...
- vue体验
1.创建工作区 2.点击添加文件 3.新建一个html文件,并输入!+tab 自动生成html结构 4.输入div#app,生成头部 <!DOCTYPE html> <html l ...