线段树(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> ...
随机推荐
- Swift语法入门
正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...
- 纯CSS多级菜单
主要代码部分: /*新增的二级菜单部分*/ .menu ul ul { visibility:hidden;/*开始时是隐藏的*/ position:absolute; left:0px; top:3 ...
- Linux_VPN—pptpd构架方法
以下是由本人测试可用的pptpd构架方法 按步骤: 运行环境Centeros 6 *首先运行如下命令: cat /dev/net/tun 返回的必须是: cat: /dev/net/tun: File ...
- java计算时间差
比如:现在是2016-03-26 13:31:40 过去是:2016-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFo ...
- 31 GroupSock(AddressString)——live555源码阅读(四)网络
31 GroupSock(AddressString)——live555源码阅读(四)网络 31 GroupSock(AddressString)——live555源码阅读(四)网络 简介 Addre ...
- C# 毕业证书打印《五》
对鼠标操作Label的方法 #region //定义一个枚举类型,描述光标状态 private enum EnumMousePointPosition { #region MouseSizeNone ...
- TCP三次握手原理详解
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层. TCP协议:即传输控制 ...
- Routing in ASP.NET Web API和配置文件的设定读取
Routing Tables In ASP.NET Web API, a controller is a class that handles HTTP requests. The public me ...
- CLR via C# 随记
使用C# 编译器的方法: 1.csc.exe位于C:\Windows\Microsoft.NET\Framework\vxxxxx下面,将对应版本的路径配置到环境变量path中,如将";C: ...
- Alien Dictionary
There is a new alien language which uses the latin alphabet. However, the order among letters are un ...