线段树(main函数自由)
都是一些裸线段树的模板,无主函数!
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define ll long long
#define M 400010
#define lson l,m,now*2
#define rson m+1,r,now*2+1
using namespace std;
ll tag[M],sum[M];
void push_up(int now)
{
sum[now]=sum[now*]+sum[now*+];
}
void push_down(int now,int m)
{
if(tag[now])
{
tag[now*]+=tag[now];
tag[now*+]+=tag[now];
sum[now*]+=tag[now]*(m-(m/));
sum[now*+]+=tag[now]*(m/);
tag[now]=;
}
}
void build(int l,int r,int now)
{
tag[now]=;
if(l==r)
{
scanf("%lld",&sum[now]);
return;
}
int m=(l+r)/;
build(lson);
build(rson);
push_up(now);
}
void modify(int pos,int v,int l,int r,int now)
{
if(l==r)
{
sum[now]+=v;
return;
}
int m=(l+r)/;
if(pos<=m)modify(pos,v,lson);
else modify(pos,v,rson);
push_up(now);
}
void change(int x,int y,int v,int l,int r,int now)
{
if(l>=x&&r<=y)
{
tag[now]+=v;
sum[now]+=(ll)v*(r-l+);
return;
}
push_down(now,r-l+);
int m=(l+r)/;
if(x<=m)change(x,y,v,lson);
if(y>m)change(x,y,v,rson);
push_up(now);
}
ll query(int x,int y,int l,int r,int now)
{
if(l>=x&&r<=y)return sum[now];
push_down(now,r-l+);
int m=(l+r)/;
ll ans=;
if(x<=m)ans+=query(x,y,lson);
if(y>m)ans+=query(x,y,rson);
return ans;
}
ll search(int v,int l,int r,int now)
{
if(l==r) return sum[now];
push_down(now,r-l+);
int m=(r+l)/;
if(v<=m) search(v,lson);
else if(v>m) search(v,rson);
}
线段树(main函数自由)的更多相关文章
- BZOJ 3339 Rmq Problem(离线+线段树+mex函数)
题意: q次询问,问[l,r]子区间的mex值 思路: 对子区间[l,r],当l固定的时候,[l,r]的mex值对r单调不减 对询问按照l离线,对当前的l,都有维护一个线段树,每个叶节点保存[l,r] ...
- Codeforces 343D WaterTree - 线段树, DFS序
Description Translated by @Nishikino_Maki from Luogu 行吧是我翻的 Mad scientist Mike has constructed a roo ...
- 【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)
最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不懂真的说明最基础的理论没明白 推荐一篇文章http://www.cnblogs.com/liwenchi/ ...
- BZOJ.4515.[SDOI2016]游戏(树链剖分 李超线段树)
BZOJ 洛谷 每次在路径上加的数是个一次函数,容易看出是树剖+李超线段树维护函数最小值.所以其实依旧是模板题. 横坐标自然是取个确定的距离标准.取每个点到根节点的距离\(dis[i]\)作为\(i\ ...
- 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树
正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...
- [Vani有约会]雨天的尾巴——树上差分+动态开点线段树合并
题目描述 首先村落里的一共有n座房屋,并形成一个树状结构.然后救济粮分m次发放,每次选择两个房屋(x,y),然后对于x到y的路径上(含x和y)每座房子里发放一袋z类型的救济粮. 然后深绘里想知道,当所 ...
- 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- 【杂题】[CodeForces 1172F] Nauuo and Bug【数据结构】【线段树】
Description 给出一个长度为n的序列a和一个整数p 有m组询问,每组询问给出一个区间\([l,r]\) 你需要给出下面这个过程的结果 ans = 0 for i from l to r { ...
- LightOJ 1370 Bi-shoe and Phi-shoe 欧拉函数+线段树
分析:对于每个数,找到欧拉函数值大于它的,且标号最小的,预处理欧拉函数,然后按值建线段树就可以了 #include <iostream> #include <stdio.h> ...
随机推荐
- 用H5的canvas做时钟
<!doctype html><html> <head> <meta charset="UTF-8"> <title>D ...
- ubuntu下修改apache2.4的rewrite
sudo a2enmod rewrite 修改/etc/apache2/apache2.conf中 AllowOverride None 为 AllowOverride ALL 重启 service ...
- CentOS6系升级Python2.7版本
安装前准备 本实例以CentOS6.7为例 [root@E tools]# uname -r 2.6.32-431.23.3.el6.x86_64 [root@E tools]# uname -m x ...
- 回复《我要阻止做java开发的男朋友去创业型公司工作吗?》园友问题
真的非常开心能收到这么多园友的关心,看到这么多的回复顿感身边处处充满爱.也非常感谢大家踊跃的帮我出谋划策,小女子在此有礼了! 我先来回答一下性别的问题(前面已经暴露了……),我是前端程序媛.大三时和男 ...
- centos PIL 安装
http://itekblog.com/centos-6-x-install-pil-python-imaging-library-tutorial/
- centos 6.5 git 服务器的配置(入门级)
参考:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-git-server-on-a-vps http ...
- Eclipse J2EE LUNA 部署tomcat
- etcd相关资料
<1>etcd:从应用场景到实现原理的全方位解读 http://www.infoq.com/cn/articles/etcd-interpretation-application-scen ...
- bitnami-redmine 安装与插件使用
bitnami-redmine 公司要进行敏捷开发管理,选择Redmine作为管理工具. 而Redmine本身的需要的环境比较麻烦,需要安装mysql,ruby,redmine,apach. Bitn ...
- SQL合并多行查询到一行
示例表 tb 数据如下 id value—————1 aa1 bb2 aaa2 bbb2 ccc 第一种 SELECT id, [val]=( SELECT [value] +',' FROM tb ...