水平有限,前缀和的前缀和什么的,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模板的更多相关文章

  1. BZOJ-1834 网络扩容 最小费用最大流+最大流+乱搞

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2269 Solved: 1136 [Submit ...

  2. poj3468 A Simple Problem with Integers(zkw区间修改模板)

    此题是一道线段树的裸题,这里只是为了保存我的zkw线段树模板 #include <cstdio> #include <cstring> #include <iostrea ...

  3. zkw线段树模板题

    学了zkw线段树,觉得没什么必要刷专题的吧(切不动啊).. 那先放一个模板题吧(我绝不会和你说搬了一道树状数组模板题的!!!) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加 ...

  4. 最小费用流模板(zkw与spfa)

    "zkw" 费用流算法在哪些图上慢(摘自https://www.cnblogs.com/ECJTUACM-873284962/p/7744943.html) 实践中, 上面的这个算 ...

  5. [模板] 网络流相关/最大流ISAP/费用流zkw

    最大流/ISAP 话说ISAP是真快...(大多数情况)吊打dinic,而且还好写... 大概思路就是: 在dinic的基础上, 动态修改层数, 如果终点层数 \(>\) 点数, break. ...

  6. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

  7. zkw费用流模板

    理论:http://www.cnblogs.com/acha/p/6735037.html #include<cstdio> #include<cstring> #includ ...

  8. [模板]非递归线段树(zkw的变异版本)

    类似于zkw,但空间只用两倍,zkw要4倍. 链接 可以下传标记,打熟后很好码. #include <set> #include <cmath> #include <cs ...

  9. [模板] zkw线段树

    zkw线段树 code1简单版本 code2差分版本(暂无) code1:(有注释) //By Menteur_Hxy #include<cstdio> #include<iostr ...

随机推荐

  1. 用python爬取微博数据并生成词云

    很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,放在今天应该比较应景. 一年一度的虐汪节,是继续蹲在角落默 ...

  2. Ubuntu下比较通用的makefile实例

    本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html  笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...

  3. IdentityServer4 指定角色授权(Authorize(Roles="admin"))

    1. 业务场景 IdentityServer4 授权配置Client中的AllowedScopes,设置的是具体的 API 站点名字,也就是使用方设置的ApiName,示例代码: //授权中心配置 n ...

  4. 【Kafka源码】SocketServer启动过程

    SocketServer主要用于接收外部的网络请求,并把请求添加到请求队列中. 一.入口 在KafkaServer.scala中的start方法中,有这样的入口: socketServer = new ...

  5. HTTP中的Range: bytes=0-

    HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传.Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的 表示第二个 ...

  6. Robotframework-Appium系列:安装配置

    1.   Robotframework-android系列:安装配置 1.1. 安装环境 64位win10家庭中文版 1.1. 安装说明 网上robotframework-appium安装资料也不少, ...

  7. flask中下载服务器上特定路径的文件

    使用flask下载服务器上某个路径下的文件 path:文件路径以及需要下载的文件,直接写入参数有安全隐患,实际应用中需要判断权限之类的 from flask import send_file, mak ...

  8. selenim之ActionChains(一)

    大家好,来介绍下,今天要分享的是小编学ActionChains的经验. 先来说一下今天要用到的方法: click(element=null)                               ...

  9. axios在vue中的简单配置与使用

    一.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:https://hzzly.github.io/2017/03/12/ ...

  10. requests和BeautifulSoup

    一:Requests库 Requests is an elegant and simple HTTP library for Python, built for human beings. 1.安装 ...