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 清点更多船只 (卡空间线段树)的更多相关文章

  1. 【GDKOI2016】 魔卡少女 线段树

    题目大意:给你一个长度为n的序列${a_1....a_n}$,有$m$次操作 每次操作有两种情况:修改$a_i$的值,询问$[l,r]$中所有子区间的异或和. 数据范围:$n,m≤10^5$,$a_i ...

  2. BZOJ.2212.[POI2011]Tree Rotations(线段树合并)

    题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...

  3. hdu 4107 Gangster(线段树,时间卡得很严)

    这道题目的数据卡得好厉害. 题目明显是考察线段树延迟标记的,但是因为要考虑到p的值,这种延迟是有条件的:在该节点下所有的数据对于p都应该位于p的同一侧.要么都比p大,要么都比p小. 开始的时候我用一个 ...

  4. Codeforces Gym100543B 计算几何 凸包 线段树 二分/三分 卡常

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF-Gym100543B.html 题目传送门 - CF-Gym100543B 题意 给定一个折线图,对于每一条 ...

  5. 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 ...

  6. Codeforces 1093G题解(线段树维护k维空间最大曼哈顿距离)

    题意是,给出n个k维空间下的点,然后q次操作,每次操作要么修改其中一个点的坐标,要么查询下标为[l,r]区间中所有点中两点的最大曼哈顿距离. 思路:参考blog:https://blog.csdn.n ...

  7. 【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)

    [BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依 ...

  8. BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精

    考试的时候切掉了,然而卡精 + 有一个地方忘开 $long long$,完美挂掉 $50$pts. 把式子化简一下,然后直接拿线段树来维护即可. Code: // luogu-judger-enabl ...

  9. 线段树区间合并+k维空间的曼哈顿距离——cf1093G好题

    和去年多校的CSGO一样,用状态压缩来求Manhattan距离的最大值 然后要用线段树维护一下区间最大值 /* k维空间给定n个点,两个操作 1 i b1 b2 .. bk : 修改第i个点的坐标 2 ...

随机推荐

  1. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  2. [JDBC]你真的会正确关闭connection吗?

    Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManag ...

  3. monkey测试基础

    一.环境配置 Java JDK和android SDK 二.基本命令 *安卓手机链接电脑,打开手机的开发者模式,允许usb调试 adb:检查adb是否安装成功 adb devices:查看连接的设备 ...

  4. db2修改最大连接数

    查看当前连接数,sample为数据库名db2 list applications for db sample db2 list applications for db sample show deta ...

  5. 牛客OI赛制测试赛-序列-模拟

    哇这道题好坑啊,可能是我太菜了 题意就是叫把一个连续序列分成K组,使得每个组的和都相等 我最开始的想法是由于要分成K组,那我们知道,每组一定有sum(a[i])/k这样我们只需要每次当num==sum ...

  6. 【SE】Week17 : 软件工程课程总结

    软工课程总结  总算结束了一个学期大部分的事情,可以静下心来写篇软工的总结了. 在本学期的软工课程中,我担任的角色是Chronos团队的PM兼开发人员.在课程之前,我认为PM的角色应该还蛮轻松的,无非 ...

  7. oracle alter

    ALTER TABLE (表名) ADD CONSTRAINT (索引名);ALTER TABLE (表名) DROP CONSTRAINT (索引名); ALTER TABLE (表名) ADD ( ...

  8. 剑指offer:变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   思路 首先想到的解决方案是根据普通跳台阶题目改编,因为可以跳任意级,所以要 ...

  9. Service Fabric

    Service Fabric 开源 微软的Azure Service Fabric的官方博客在3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ...

  10. vue 路由传参 params 与 query两种方式的区别

    初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query.然后,错误就这么来了:  router文件下index.js里面,是这么定义路由的: { p ...