学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间. 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put())都要新建点.于是MLE了. #include<cstdio> #include<algorithm> #define lson v[x].ls,L,mid #define rson v[x].rs,mid+1,R #define rep(i,l,r) for (int i=(l)…
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间,还要加一个标记永久化,这样就不用pushdown新加节点而爆内存了 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi ac…
SP11470 TTM - To the moon C l r d:区间 \([L,R]\) 中的数都加 d ,同时当前的时间戳加 1. Q l r:查询当前时间戳区间 \([L,R]\) 中所有数的和 . H l r t:查询时间戳 \(t\) 区间 \([L,R]\) 的和 . B t:将当前时间戳置为 \(t\) 每次记下版本 \(times\) 保留标记-每次标记的时候直接加上\(tag_p\) 即可 #include <bits/stdc++.h> #define ls(x) ch[…
Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ymx.yxh 都去打了,可我似乎那时候还在旅游? 不难发现,对于操作 \(i\) 实际上是将 \(a_i\) 与 \(b_i\) 子树的并集内的点的答案集合并上 \(a_i\) 与 \(b_i\) 子树的并集.于是我们考虑将询问离线下来并在树上进行一遍 DFS,动态地维护一个可重集 \(S\).当我们第一次访问…
听说正解点分树?我不会就对了 此题是 \([LNOI2014]LCA\) 强化版,也是差分一下,转化为区间加区间和 不过权值有大小要求,那么我们按照权值排序,依次加入主席树,询问的时候 \(lower\_bound\) 一下找到区间 \([l,r]\) 在主席树上实现区间加,肯定要标记永久化.每次最多修改 \(2\lfloor \log^n\rfloor\) 个区间,所以一次最多会开出 \(4\lfloor \log^n\rfloor-1\) 个结点,空间复杂度理论上是 \(O(4n\log^2…
题面一看就是裸的数据结构题,而且一看就知道是主席树... 一共四种操作:1:把区间[l, r]的数都加上d,并且更新时间.2:查询当前时间的区间和.3:查询历史时间的区间和.4:时光倒流到某个时间. 正常来说,主席树比较难支持区间操作,但是我们可以用标记永久化的方法去实现区间操作.标记永久化和懒标记下放不一样,标记永久化是这样操作的:对所有和标记区间相关的区间,直接加上这次操作的影响,如果这个区间被标记区间完全覆盖,就打上标记.查询的时候,需要把访问沿途的所有的区间的标记算上. 代码: #inc…
Problem Description Background To The Moon is a independent game released in November 2011, it is a role-playing adventure game powered by RPG Maker. The premise of To The Moon is based around a technology that allows us to permanently reconstruct th…
题目链接 BZOJ4785 题解 肝了一个下午QAQ没写过二维线段树还是很难受 首先题目中的树状数组实际维护的是后缀和,这一点凭分析或经验或手模观察可以得出 在\(\mod 2\)意义下,我们实际求出的区间和是\([l - 1,r - 1]\),和\([l,r]\)唯一不同的就在于\(l - 1\)和\(r\) 所以每个询问实际是询问两个位置值相同的概率 我们把询问看做二元组\((a,b)\),其中\(a \le b\),我们要维护\((a,b)\)不同的概率[至于为什么是不同而不是相同,等下说…
http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. 前面眼瞎爆了一次空间改过来之后交第二次奇迹一样a了,好久没有1A过了(泪). #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath…
传送门 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r t:查询时间戳t区间[l,r]的和 . (4)B t:将当前时间戳置为t . 所有操作均合法 . 题解 原来……主席树真的能做可持久化的啊……花了一个下午才搞明白……(虽然是看题解的) 先考虑一下,如果直接每一次修改的话,一共要修改$r-l+1$次,空间复杂度绝对爆炸 然后考虑一下线段树的打…
P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久化,就是不下传标记,而是每次询问时算上路径上的标记 标记永久化后快了1倍 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define rint registe…
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r t:查询时间戳t区间[l,r]的和 . (4)B t:将当前时间戳置为t . 所有操作均合法 . 解法: 很明显是一道主席树的题 . 对于每一次区间加法都新建节点建一棵线段树,加个懒惰标记就行了,查询的话直接线段树区间求和 .…
题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标记,而且标记的形式是对一段区间赋值.所以我们对每个标记需要开线段树来维护更改的位置 而且由于我们pushdown的时候是从一棵线段树里找出标记下传,pushup的时候是从子树的线段树总找出最大值上传,显然复杂度会爆炸,那么我们考虑标记永久化 具体来说,我们在写线段树的时候,如果在一段区间上打了赋值标…
1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 351  Solved: 220[Submit][Status][Discuss] Description 一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串P是串A的前缀, 当且仅当存在串B, 使得 A = PB. 如果 P A 并且 P 不是一个空串,那么我们说 P 是A的一个proper前缀. 定义Q 是A…
题意: 给出一个长度为\(n(n \leq 10^5)\)的序列,最开始时间\(t=0\),支持下面几个操作: \(C \, l \, r \, d\):将区间\([l,r]\)每个数都加上\(d\),并且时间\(t\)增加1秒 \(Q \, l \, r\):查询当前时间区间\([l,r]\)所有元素之和 \(H \, l \, r \, t\):查询时间为\(t\)时,区间\([l,r]\)的所有元素之和 \(B \, t\):时间回溯到\(t\) 输出每次查询的结果. 分析: 这是支持区间…
题意:有N个位置,M个操作.操作有两种,每次操作 如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N,M<=50000,N,M<=50000 a<=b<=N 1操作中abs(c)<=N 2操作中c<=Maxlongint 思路:这道题如果外层是位置的话就需要在外层区间更新 并不会写 所以需要外层权值,内层位置 然而常数太渣,BZOJ上过不去 并不想(会)写标记永…
题意 分析 动态加点线段树,标记永久化好写常数小 Code #include<bits/stdc++.h> #define fi first #define se second #define lson l,mid,p<<1 #define rson mid+1,r,p<<1|1 #define pb push_back #define ll long long using namespace std; const ll inf=1e18; const int mod=…
题面传送门 首先学过树状数组的应该都知道,将树状数组方向写反等价于前缀和 \(\to\) 后缀和,因此题目中伪代码的区间求和实质上是 \(sum[l-1...n]-sum[r...n]=sum[l-1...r-1]\),我们要求 \(sum[l...r]=sum[l-1...r-1]\) 的概率,等价于求 \(a_{l-1}=a_r\) 的概率. 因此我们可将题目转化为,每次从 \([l,r]\) 中随机选择一个数将其状态翻转,并询问 \(a_x=a_y\) 的概率. 这个可以通过二维线段树解决…
#include<map> #include<set> #include<list> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define…
To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description BackgroundTo The Moon is a independent game released in November 2011, it is a role-playing adventure game powered by RPG Maker.The pr…
题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r t:查询时间戳t区间[l,r]的和 . (4)B t:将当前时间戳置为t . (第一次修改t为1: 思路:被https://www.cnblogs.com/hsd-/p/6506175.html思路坑了一下午,好吧就是自己没懂 然后看到vjudge上的一个思路:感觉这个思路更清晰: #include…
影魔 bzoj-4826 Hnoi-2017 题目大意:给定一个$n$个数的序列$a$,求满足一下情况的点对个数: 注释:$1\le n,m\le 2\cdot 10^5$,$1\le p1,p2\le 1000$. 想法: 我们先用单调栈求出一个数左边第一个比它大的,和右边第一个比它大的.$l_i$和$r_i$就表示这两个值. 然后我们发现,$(l_i,r_i)$就是一个合法的第一个条件的点对. 接下来我们考虑如何统计第二个条件的点对. 第二个条件的话如果还想用刚才的值表示的话,我们发现就是在…
2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 45  Solved: 30[Submit][Status][Discuss] Description 在一个没有冬马的世界里,经历了学园祭后的春希着急着想要见到心爱的雪菜.然而在排队想见雪菜的fans太多了,春希一时半会凑不到雪菜面前. 作为高帅富,这样的问题怎么能难倒春希?春希从武也手中拿到了取自金闪闪宝库里的多啦A梦的传话筒,并且给每一个排队的fans都发了一个传话筒. 于…
讲得好啊 主席树区间修改了,每一次遇到整区间就打永久化标记(不下传,访问的时候沿路径上的标记算答案)然后returnreturnreturn,那么每修改一次只会访问到lognlognlogn个节点,再加上每个点要在树链上修改lognlognlogn次,所以空间复杂度O(nlog2n)O(nlog^2n)O(nlog2n),实测开O(n∗50)O(n*50)O(n∗50)能过- 各个sum都要开longlong啊,毁一生 CODE #include <cmath> #include <cs…
标记永久化,除非想\(MLE\) 忽然感到主席树不过是函数式的树套树 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register in…
Background To The Moon is a independent game released in November 2011, it is a role-playing adventure game powered by RPG Maker. The premise of To The Moon is based around a technology that allows us to permanently reconstruct the memory on dying ma…
题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲了主席树可以资瓷单点修改,那么区间修改资不资瓷呢?那当然是资瓷的啦. 就像一般的线段树一样,主席树的一个内部节点也可以存储两个儿子的和,在修改时打标记,在查询时直接返回当前区间的值即可.和单点修改不同的是,区间修改一次最多需要修改线段树上的4个节点(可以脑内证明),也就是说我们需要在历史版本上新建…
spoj传送门 vjudge传送门 主席树板子题. 支持历史版本的区间和,区间和,区间修改和时光倒流. 其中新奇一点的也只有区间修改了,这个东西直接标记永久化就行了. 如果想下传标记的话也行,需要在pushdown的时候新建一波节点. 代码: #include<cstdio> #include<cctype> #define ll long long #define N 100005 using namespace std; inline ll read(){ ll ans=0,w…
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //========================== 好久没写题解了. 但是这题太神了然后做法太神了于是写一下. 这题做法很多,比如黄学长hzw的权值线段树套线段树,比如学长云的bit套主席树(其实是写法更神然后我不会用). 然后看到hzhwcmhf大神题解. http://tieba.baidu.com/p/224678353…
题意 概括为主席树区间加区间询问 题解 记录一下标记永久化的方法.每个点存add和sum两个标记,表示这个区间整个加多少,区间和是多少(这个区间和不包括祖先结点区间加) 然后区间加的时候,给路上每结点的sum更新,然后到达完整区间后更新add.询问的时候把路径上所有结点(不包括自己)的add加起来乘以区间长度,再加上sum 大概思想就是:区间内的加法用sum维护,区间外的加法询问的时候再考虑贡献 #include <algorithm> #include <cstdio> usin…