水平有限,前缀和的前缀和什么的,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. django 实现同一个ip十分钟内只能注册一次

    很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注 ...

  2. RabbitMQ 默认端口号

    4369 (epmd), 25672 (Erlang distribution) 5672, 5671 (AMQP 0-9-1 without and with TLS) 15672 (if mana ...

  3. Hat’s Words

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  4. 网络基础三 ARP 地址分类 NAT技术

    第1章 OSI回顾 1.1 TCP/IP协议族组成 应用层 主机到主机层   互联网层   网络接入层 1.2 总结应用层掌握的协议与端口号对应关系 http(80) telnet(23) ftp(2 ...

  5. caffe源码分析 vector<Blob<Dtype>*>& bottom

    Blob:4个维度 n x c x h x w: bottom[0] .bottom[1]代表该层有几个输入. bottom[0]->count(): 输入中,元素的总维数(个数) bottom ...

  6. JavaNIO非阻塞模式

    package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...

  7. setImmediate()

    在循环事件任务完成后马上运行指定代码 以前使用   setTimeout(fn, 0);   Since browsers clamp their timers to 4ms, it really d ...

  8. kafka学习笔记2:生产者

    这次的笔记主要记录一下kafka的生产者的使用和一些重要的参数. 文中主要截图均来自kafka权威指南 主要涉及到两个类KafkaProducer和ProducerRecord. 总览 生产者的主要架 ...

  9. Input类型是checkbox时checked属性获取

    记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...

  10. mysql数据库第三弹

    mysql数据库知识拓展 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT ...