zkw模板
水平有限,前缀和的前缀和什么的,rbq
两个操作:
1.区间l到r加上一个数x
2.查询区间[l,r]的区间和
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,d,x,pt,ptl,ptr;//pt,ptl,ptr我也不知道应该叫什么,类似标记?
long long tree[100000*4+2],pls[100000*4+2],ans;//pls为累加标记
inline void add(int l,int r)
{
	l=l+d,r=r+d;
	pt=0;
	pls[l]+=x,tree[l]+=x;
	if(l!=r)
	{
		pls[r]+=x,tree[r]+=(x<<pt);
		while((l^1)!=r)
		{
			if(!(l&1))
				pls[l^1]+=x,tree[l^1]+=(x<<pt);
			if(r&1)
				pls[r^1]+=x,tree[r^1]+=(x<<pt);
			pt++;
			l=l>>1,r=r>>1,tree[l]=tree[l<<1]+tree[l<<1|1]+(pls[l]<<pt),tree[r]=tree[r<<1]+tree[r<<1|1]+(pls[r]<<pt);
		}
	}
	while(l>>=1)
	{
		pt++;
		tree[l]=tree[l<<1]+tree[l<<1|1]+(pls[l]<<pt);
	}
}
long long getans(int l,int r)
{
	l=l+d,r=r+d;
	ans=tree[l];
	ptl=pt=1;
	if(l!=r)
	{
		ans+=tree[r],ptr=1;
		while((l^1)!=r)
		{
			if(!(l&1))
				ans+=tree[l^1],ptl=ptl+pt;
			if(r&1)
				ans+=tree[r^1],ptr=ptr+pt;
			pt=pt<<1;
			l=l>>1;
			r=r>>1;
			ans=ans+pls[l]*ptl+pls[r]*ptr;
		}
		ptl+=ptr;
	}
	while(l>>=1)
		ans+=pls[l]*ptl;
	return ans;
}
int main()
{
	scanf("%d%d",&n,&m);
	d=1;
	while(d<n)
		d<<=1;
	d--;
	for(int i=1;i<=n;i++)
		scanf("%lld",&tree[d+i]);
	for(int i=(n+d)>>1;i;i--)
		tree[i]=tree[i<<1]+tree[i<<1|1];
	int t,l,r;
	while(m--)
	{
		scanf("%d%d%d",&t,&l,&r);
		if(t==1)
		{
			scanf("%d",&x);
			add(l,r);
		}
		else
			printf("%lld\n",getans(l,r));
	}
	return 0;
}
zkw模板的更多相关文章
- BZOJ-1834  网络扩容    最小费用最大流+最大流+乱搞
		1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2269 Solved: 1136 [Submit ... 
- poj3468 A Simple Problem with Integers(zkw区间修改模板)
		此题是一道线段树的裸题,这里只是为了保存我的zkw线段树模板 #include <cstdio> #include <cstring> #include <iostrea ... 
- zkw线段树模板题
		学了zkw线段树,觉得没什么必要刷专题的吧(切不动啊).. 那先放一个模板题吧(我绝不会和你说搬了一道树状数组模板题的!!!) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加 ... 
- 最小费用流模板(zkw与spfa)
		"zkw" 费用流算法在哪些图上慢(摘自https://www.cnblogs.com/ECJTUACM-873284962/p/7744943.html) 实践中, 上面的这个算 ... 
- [模板] 网络流相关/最大流ISAP/费用流zkw
		最大流/ISAP 话说ISAP是真快...(大多数情况)吊打dinic,而且还好写... 大概思路就是: 在dinic的基础上, 动态修改层数, 如果终点层数 \(>\) 点数, break. ... 
- 洛谷.3381.[模板]最小费用最大流(zkw)
		题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ... 
- zkw费用流模板
		理论:http://www.cnblogs.com/acha/p/6735037.html #include<cstdio> #include<cstring> #includ ... 
- [模板]非递归线段树(zkw的变异版本)
		类似于zkw,但空间只用两倍,zkw要4倍. 链接 可以下传标记,打熟后很好码. #include <set> #include <cmath> #include <cs ... 
- [模板] zkw线段树
		zkw线段树 code1简单版本 code2差分版本(暂无) code1:(有注释) //By Menteur_Hxy #include<cstdio> #include<iostr ... 
随机推荐
- 剖析Linux系统调用的执行路径
			在什么是操作系统这篇文章中,介绍过操作系统像是一个代理一样,为我们去管理计算机的众多硬件,我们需要计算机的一些计算服务.数据管理的服务,都由操作系统提供接口来完成.这样做的好处是让一般的计算机使用者不 ... 
- Nginx Location 匹配
			location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写~* #表示执行一个正则匹配,不区分大小写^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配 ... 
- Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期
			该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>中的相关知识,再次表示该书 ... 
- Node.js CVE-2017-1484复现(详细步骤)
			0x00 前言 早上看Sec-news安全文摘的时候,发现腾讯安全应急响应中心发表了一篇文章,Node.js CVE-2017-14849 漏洞分析(https://security.tencent. ... 
- Thinkphp5 模型 验证器执行顺序问题
			Thinkphp5把模型的验证规则归为一个验证器,这种做法,不知到符不符合大家的心意,反正楼主是比较不爽的 楼主更倾向于tp3.2的验证规则直接写在模型里面,毕竟你的验证规则一般而言是针对模型来验证的 ... 
- Oracle 数据库常用操作语句大全
			一.Oracle数据库操作 1.创建数据库 create database databasename 2.删除数据库 drop database dbname 3.备份数据库 完全 ... 
- Remove Untagged Images From Docker
			I've been playing around a lot with docker. It's awesome, and it creates a whole new world of possib ... 
- python中pygame模块的Linux下安装过程
			一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ... 
- J-Link驱动下载和Hex程序下载
			J-LINK驱动下载 1.首先拥有硬件J-Link硬件. 2.安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com/downloads/jlink/JLin ... 
- [转载] ZooKeeper原理及使用
			转载自http://www.wuzesheng.com/?p=2609 ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordina ... 
