博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4348区间更新的主席树+标记永久化
阅读量:4349 次
发布时间:2019-06-07

本文共 1438 字,大约阅读时间需要 4 分钟。

http://acm.hdu.edu.cn/showproblem.php?pid=4348

sb的标记永久化即可,刚开始add和sum没复制过来wa了两发。。。,操作和原来的都一样,出来单点变成区间,还要加一个标记永久化,这样就不用pushdown新加节点而爆内存了

#include
#define fi first#define se second#define mp make_pair#define pb push_back#define pi acos(-1.0)#define ll long long#define mod 1000000007#define C 0.5772156649//#define ls l,m,rt<<1//#define rs m+1,r,rt<<1|1#define pil pair
#define pii pair
#define ull unsigned long long#define base 1000000000000000000#define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;const double g=10.0,eps=1e-12;const int N=100000+10,maxn=90000+10,inf=0x3f3f3f3f;int rt[N],tot,ls[N*30],rs[N*30];ll sum[N*30],add[N*30];void build(int &o,int l,int r){ o=++tot; add[o]=0; if(l==r) { scanf("%lld",&sum[o]); return ; } int m=(l+r)>>1; build(ls[o],l,m); build(rs[o],m+1,r); sum[o]=sum[ls[o]]+sum[rs[o]];// printf("%d+++%d+++%d+++%lld+++%d\n",l,r,o,sum[o],add[o]);}void update(int &o,int l,int r,int last,int L,int R,int x){ o=++tot; ls[o]=ls[last]; rs[o]=rs[last]; sum[o]=sum[last]; add[o]=add[last]; if(L<=l&&r<=R) { add[o]+=x; return ; } int m=(l+r)>>1; if(L<=m)update(ls[o],l,m,ls[last],L,R,x); if(m
>1; if(L<=m)ans+=query(ls[o],ad+add[o],l,m,L,R); if(m
View Code

 

转载于:https://www.cnblogs.com/acjiumeng/p/8362057.html

你可能感兴趣的文章
Recycle团队项目第二次冲刺
查看>>
Junit 单元测试基本使用方法
查看>>
html5中 table数据导出到excel文件
查看>>
springboot 集成swagger ui
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
MySQL表的操作
查看>>
pt-table-checksum解读【转】
查看>>
matlab中类的定义和使用
查看>>
NIO(2):Channel
查看>>
Consistent Hashing算法
查看>>
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
查看>>
lvs,nginx反向代理,虚拟主机
查看>>
jquip,更简洁的代码
查看>>
【OJ】PAT-A解题报告
查看>>
基础练习 回文数
查看>>
科普-- 白话HTTPS
查看>>
文档语法
查看>>
利用套接字实现进程通信一例
查看>>
linux中shell变量$#,$@,$0,$1,$2的含义解释
查看>>