线段树(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> ...
随机推荐
- C#第一次的Hello World
这个Hello World是最基础的,在程序默认生成的using System下,不用自己可以的去写using System. 我们要牢记compling and running和running wi ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- C/C++开发者必不可少的15款编译器+IDE
1)Best IDE for C/C++ – kDevelop(http://kdevelop.org/) Kdevelop是一个专为C/C++及其他语言的开源扩展插件IDE.它基于KDevPlat ...
- 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数
来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...
- 用 FragmentManager 替换时使用 GoogleMaps 崩溃 app
我要用下面的代码来加载的片段的项已被选定在 NavigationDrawer,然而 MapFragment 包含它里面的谷歌地图片段和它崩溃后试图打开它第二次. 这里是我使用的代码: @Overrid ...
- iOS开发——网络篇——UIWebview基本使用,NSInvocation(封装类),NSMethodSignature(签名),JavaScript,抛异常,消除警告
一.UIWebView简介 1.UIWebView什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但 ...
- autolayout的各种坑
xocde7的autolayout 在viewDidLoad之前, 使用frame改变布局是没有用的, 简单的视图才可以使用autolayout, 稍微复杂写的都要使用代码来编写 获取当前view的宽 ...
- java读取文件
一个字节一个字节地读取 File file = InputStream inputStream = ...
- IE兼容性
1.ie兼容css3 border-radius.box-shadow.text-shadow的方法 2.ie兼容性问题及解决方法 3.css Hack 一.ie兼容border-radius.box ...
- ubuntu彻底卸载mysql
1.删除mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt ...