洛谷 P3372 线段树1
这是一道模板题
线段树介绍https://www.cnblogs.com/nvwang123/p/10420832.html
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[]; struct node{
int l,r;
long long w,f; //w是区间值,f是懒标记
}xds[*]; //4倍空间 //一、建树
void buid(int l,int r,int k){
xds[k].l=l;
xds[k].r=r;
if(l==r){
xds[k].w=a[l]; // 最底层的区间从左边开始是1,所以可以这样
return;
}
int m=(l+r)/;
buid(l,m,*k);
buid(m+,r,*k+);
xds[k].w=xds[*k].w+xds[*k+].w;//不要忘记区间和上传!!特别容易忘
} //二、懒标记下传
void down(int k){
xds[*k].w+=xds[k].f*(xds[*k].r-xds[*k].l+);
xds[*k+].w+=xds[k].f*(xds[*k+].r-xds[*k+].l+);
xds[*k].f+=xds[k].f;
xds[*k+].f+=xds[k].f;
xds[k].f=;//易漏
} //三、区间修改
void add_(int x,int y,int k,int a){
if(xds[a].l>=x&&xds[a].r<=y){
xds[a].w+=(long long)k*(xds[a].r-xds[a].l+);
xds[a].f+=k; //易漏 ,记得做懒标记
return;
}
if(xds[a].f) down(a);//!!!
int m=(xds[a].l+xds[a].r)/;
if(x<=m) add_(x,y,k,a*);
if(y>m) add_(x,y,k,a*+);
xds[a].w=xds[a*].w+xds[a*+].w;
} long long ask_(int x,int y,int k) //注意数据范围内,开int只能得70分
{
if (xds[k].l>=x&&xds[k].r<=y)
return xds[k].w; if(xds[k].f) down(k); int m=(xds[k].l+xds[k].r)/;
long long ans=;
if(x<=m) ans+=ask_(x,y,k*);
if(y>m) ans+=ask_(x,y,k*+);
return ans;
} int main(){
cin>>n>>m; for(int i=;i<=n;i++) cin>>a[i];
buid(,n,); for(int i=;i<=m;i++){
int a,x,y,k;
cin>>a;
if(a==) cin>>x>>y>>k,add_(x,y,k,);
if(a==) cin>>x>>y,cout<<ask_(x,y,)<<endl;
}
return ;
}
洛谷 P3372 线段树1的更多相关文章
- 洛谷P3372线段树模板1——线段树
题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...
- 洛谷P3372线段树1
难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...
- NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...
- 洛谷P3373线段树模板2
题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...
- 洛谷P3373 线段树2(补上注释了)
毒瘤题.找了一下午+晚上的BUG,才发现原来query_tree写的是a%p; 真的是一个教训 UPD:2019.6.18 #include<iostream> #include<c ...
- 洛谷3372线段树模板题 对区间+k或者查询区间和
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)
洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷P3018 [USACO11MAR]树装饰Tree Decoration
洛谷P3018 [USACO11MAR]树装饰Tree Decoration树形DP 因为要求最小,我们就贪心地用每个子树中的最小cost来支付就行了 #include <bits/stdc++ ...
随机推荐
- vue进阶 --- 实例演示
这篇博客将通过一个实例来对vue构建项目的过程有一个了解. 主要用到的知识点如下所示: vue-router 2.0路由配置 router-view 和 router-link的使用 transiti ...
- 手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- GitKraken使用教程-基础部分(3)
5. 克隆服务器上的项目 首先,返回主界面,点击File => Clone Repo,选择 Clone with URL,如下图: 图 5‑1 SSH方式克隆仓库界面 1) SSH 方式连接仓库 ...
- Lua 遍历Linux目录下的文件夹
代码如下,里面有注释,应该能看懂. function getFile(file_name) local f = assert(io.open(file_name, 'r')) local string ...
- Java入门之IDE集成开发环境安装及配置
常用的开发工具 一.Eclipse Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse ...
- JS动态创建SVG元素并绑定事件
var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.set ...
- jeecg3.8在子表页面中使用WebUploader组件
bcAbout-update.jsp改动如下: 因为默认子表的上传组件不能回显,所以改造成WebUploader 1.在更新页面注销掉生成代码 <%--<script type=" ...
- 2019.3.26判断是否回文(java实现)
我所有的文章都是对我总结学习的总结,那里不好或者冒犯了那里,我先对您说声对不起,请告知我进行改正. 今天java老师作业题目是判断是一个字符串否是回文: emmmm,我的思路是将字符串逆序,然后使用方 ...
- Java基于jdbc链接mysql数据库步骤示列
用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...
- .NET 自动内存管理(垃圾收集GC)
自动内存管理(垃圾收集GC) 在面向对象的环境里, 要使用资源,必须为响应 的类型分配一定 的内存空间.下面是访问一个资源所需要的几个步骤: 1. 调用中间语言(IL)的newobj 指令.当我们用N ...