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 ...
随机推荐
- 个人博客地址: furur.xyz
趁着Hexo的热度,最近就买了域名,在GitHub Pages上搭了个人博客.也不是说博客园不好吧,毕竟在博客园三年多,也学到了不少东西,唯一要吐槽的,估计也就是后台管理不方便,markdown无即时 ...
- Visual Studio2017 Remote Debugger
前言 大家在使用vs打包后的文件部署到服务器后,有时候我们需要对线网的后台进行调试.但是它不像在VS中.这个时候我们该怎么调试呢? 微软想到了这一点,他们在 VS 中给我们提供了一个功能: Remot ...
- Scrum与看板区别
看板:在制品(work-in-progress, WIP)必须被限制 WIP上限和拉动式生产 1. Scrum与看板简述 Scrum:组织拆分,工作拆分,开发时间拆分,优化发布计划,过程优化 看板 ...
- 转发:C#操作SQL Server数据库
转发自:http://www.cnblogs.com/rainman/archive/2012/03/13/2393975.html 1.概述 2.连接字符串的写法 3.SqlConnection对象 ...
- Hibernate_core_method
/** * Created by Administrator on 2015/11/30. *HibernateUtil */public class HibernateUtil { private ...
- Alpha冲刺之事后诸葛亮
组长博客 作业博客 项目Postmortem 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件针对的是福大学子来到食堂会犹豫不决无法决定吃什么 ...
- git查看分支图
git log --graph --decorate --oneline --simplify-by-decoration --all
- PSexec以及xcopy的简单使用
1. 远程执行命令. 有时候不想远程但是想执行一些命令, 比较简单的方法是: 下载systeminternals 然后解压缩后可以讲目录放到path环境变量中 然后打开命令行工具 输入 如下的命令 p ...
- python下划线
单下划线(_) 通常情况下,会在以下3种场景中使用: 1.在解释器中:在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器 ...
- DELPHI 解决DBGrid SHIFT键多选问题
在实际项目中,偶然遇到需要按下SHIFT键,在DBGrid中进行多选的情况,测试了几种方法,最终确定了一个比较好的解决方法,总结如下: procedure TTestFrame.TestDBGridM ...