suoi37 清点更多船只 (卡空间线段树)
sbw巨佬的卡空间方法,把线段树的叶节点只记到长度为16的区间,然后在叶节点上暴力修改查询,这样点数是$\frac{N}{8}$的,可以过...
orz
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=(<<),maxp=(<<)+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} ll sum[maxp],v[maxn],laz[maxp];
int N,M; inline void update(int p,int l,int r){
if(r-l+<=){
sum[p]=;
for(int i=l;i<=r;i++){
sum[p]+=v[i];
}
}else{
sum[p]=sum[p<<]+sum[p<<|];
}
}
inline void deal(int p,int l,int r,ll z){
if(r-l+<=){
for(int i=l;i<=r;i++){
v[i]+=z,sum[p]+=z;
}
}else sum[p]+=z*(r-l+);
} inline void pushdown(int p,int l,int r){
if(!laz[p]||r-l+<=) return;
int a=p<<,b=p<<|,m=l+r>>;
deal(a,l,m,laz[p]),deal(b,m+,r,laz[p]);
laz[a]+=laz[p],laz[b]+=laz[p];
laz[p]=;
} void build(int p,int l,int r){
if(r-l+<=) update(p,l,r);
else{
int m=l+r>>;
build(p<<,l,m);
build(p<<|,m+,r);
// printf("!%d %d %d\n",p,l,r);
update(p,l,r);
}
} ll query(int p,int l,int r,int x,int y){
// printf("~~%d %d %d %d %d\n",p,l,r,x,y);
pushdown(p,l,r);
if(x<=l&&r<=y) return sum[p];
if(r-l+<=){
ll re=;
for(int i=x;i<=y;i++) re+=v[i];
return re;
}
int m=l+r>>;ll re=;
if(x<=m) re=query(p<<,l,m,x,min(m,y));
if(y>=m+) re+=query(p<<|,m+,r,max(x,m+),y);
return re;
} void add(int p,int l,int r,int x,int y,ll z){
// printf("!!%d %d %d %d %d\n",p,l,r,x,y);
pushdown(p,l,r);
if(r-l+<=){
for(int i=x;i<=y;i++)
v[i]+=z,sum[p]+=z;
}else if(x<=l&&r<=y){
deal(p,l,r,z);
laz[p]+=z;
}else{
int m=l+r>>;
if(x<=m) add(p<<,l,m,x,min(m,y),z);
if(y>=m+) add(p<<|,m+,r,max(m+,x),y,z);
update(p,l,r);
}
} int main(){
//freopen("","r",stdin);
int i;
N=rd(),M=rd();
for(i=;i<=N;i++)
v[i]=rd();
N=<<((int)log2(N)+);
build(,,N);
for(i=;i<=M;i++){
char s[];
scanf("%s",s);
int l=rd(),r=rd();
if(s[]=='d'){
int d=rd();
add(,,N,l,r,d);
}else printf("%lld\n",query(,,N,l,r));
}
return ;
}
suoi37 清点更多船只 (卡空间线段树)的更多相关文章
- 【GDKOI2016】 魔卡少女 线段树
题目大意:给你一个长度为n的序列${a_1....a_n}$,有$m$次操作 每次操作有两种情况:修改$a_i$的值,询问$[l,r]$中所有子区间的异或和. 数据范围:$n,m≤10^5$,$a_i ...
- BZOJ.2212.[POI2011]Tree Rotations(线段树合并)
题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...
- hdu 4107 Gangster(线段树,时间卡得很严)
这道题目的数据卡得好厉害. 题目明显是考察线段树延迟标记的,但是因为要考虑到p的值,这种延迟是有条件的:在该节点下所有的数据对于p都应该位于p的同一侧.要么都比p大,要么都比p小. 开始的时候我用一个 ...
- Codeforces Gym100543B 计算几何 凸包 线段树 二分/三分 卡常
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543B.html 题目传送门 - CF-Gym100543B 题意 给定一个折线图,对于每一条 ...
- HDU 4348.To the moon SPOJ - TTM To the moon -可持久化线段树(带修改在线区间更新(增减)、区间求和、查询历史版本、回退到历史版本、延时标记不下放(空间优化))
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Codeforces 1093G题解(线段树维护k维空间最大曼哈顿距离)
题意是,给出n个k维空间下的点,然后q次操作,每次操作要么修改其中一个点的坐标,要么查询下标为[l,r]区间中所有点中两点的最大曼哈顿距离. 思路:参考blog:https://blog.csdn.n ...
- 【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)
[BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依 ...
- BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精
考试的时候切掉了,然而卡精 + 有一个地方忘开 $long long$,完美挂掉 $50$pts. 把式子化简一下,然后直接拿线段树来维护即可. Code: // luogu-judger-enabl ...
- 线段树区间合并+k维空间的曼哈顿距离——cf1093G好题
和去年多校的CSGO一样,用状态压缩来求Manhattan距离的最大值 然后要用线段树维护一下区间最大值 /* k维空间给定n个点,两个操作 1 i b1 b2 .. bk : 修改第i个点的坐标 2 ...
随机推荐
- 数列分块入门九题(二):LOJ6280~6282
Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每 ...
- Docker管理工具 - Swarm部署记录
之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...
- Nginx入门【转】
原文地址:http://blog.csdn.net/u012486840/article/details/53098890 1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上 ...
- python基础学习笔记(一)
安装与运行交互式解释器 在绝大多数linux和 UNIX系统安装中(包括Mac OS X),Python的解释器就已经存在了.我们可以在提示符下输入python命令进行验证(作者环境ubuntu) f ...
- 【2016.3.22】作业 Word count 小程序
今天更下word count程序的设计思路及实现方法. 我的程序贴在coding里,这里就先不贴出来了, 我的coding地址:https://coding.net/u/holy_angel/p/wo ...
- M1阶段个人总结
经过4周的开发,我们团队的第一阶段已经结束了. 这一个月来我由于其他事情较多,所以开发的工作主要交给了另外的三名同学. 我主要负责制定代码规范和工程结构,通过github来跟进项目进度,提供一些技术支 ...
- Scrum Meeting NO.7
Scrum Meeting No.7 1.会议内容 经过老师提醒,我们认识到,应尽快把主要功能实现,其他的细枝末节应在这之后慢慢添加.当今最重要的任务是和online组和数据处理组实现数据共享. 此外 ...
- 一些调格式的经验 & 插入图注和尾注
一些调格式的经验(以Word2010为例) 1. 从目录正文分别编页码 将光标放在要重新编写页码起始页的最开始位置 分节:页面布局->分隔符->分节符(连续) 插入页码后,选中页码起始页页 ...
- Mooc总结——Linux内核分析
朱荟潼+ 原创作品转载请注明出处 :<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习笔记链接汇总 第 ...
- 关于git的一些体会:
周忠贤github链接:https://github.com/zhouzhongxian git学习心得:通过这次的学习,体会到了许多东西只要你用心去做,就没有什么做不成,,这次体会到了网上学习的重要 ...