ZOJ - 2112 主席树套树状数组】的更多相关文章

题意:动态第k大,可单点更新,操作+原数组范围6e4 年轻人的第一道纯手工树套树 静态第k大可以很轻易的用权值主席树作差而得 而动态第k大由于修改第i个数会影响[i...n]棵树,因此我们不能在原主席树T上扩展, 而是另开一个表示影响的主席树dT并由树状数组来控制更新和查询前缀线段树和 注意更新时dT的下标要遵循树状数组的子集表示方法 查询时留意整个dT下移到儿子的操作 最后祝ZOJ全家Segmentation Fault #include<iostream> #include<algo…
题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几发空间. 我一共交了15发,正确率被这道题目拉低了... -- 分析 好像有人用了分块水过这道题目,然后被管理员的加强数据卡到怀疑人生... (不讲骚话了) 考虑最简单的树套树,二逼平衡树的那个,[传送门]. 但是这里肯定是T掉了. nlog3n在加强数据中会跑到\(4 \times 10^8\).…
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le n,m\le 5\times 10^4$. 想法: 在这里给予三种题解: 1)首先,最容易想到的应该就是树状数组套主席树也就是常说的带修改主席树. 第一个操作是简单的,我们只需要提取出当前区间的权值线段树后在上面二分即可. 第二个操作是主席树的看家本领好伐 第三个操作就是待修改主席树的意义.我们利用…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ291.html 题解 结论:这个写错的树状数组支持的是后缀加和后缀求和.这里的后缀求和在 x = 0 的时候比较特殊,返回 0 . 于是我们需要查询 v[L-1] 和 v[R] 相同的概率是多少. 我们可以用树套树维护一下左端点在一个区间内,右端点在另一个区间内的修改操作使得对应点发生变化的概率. 注意 L = 1 要特判. 代码 #include <bits/stdc++.h> #define cl…
原文链接http://www.cnblogs.com/zhouzhendong/p/9016579.html 题目传送门 - Codechef EDGEST 题意 给定相同点集上的两棵生成树$T_1$和$T_2$,节点编号为$1$∼$N$.对于$T_1$中的每条边$e_1$,你需要求在$T_2$中有多少条边$e_2$满足: • $T_1 − e_1 + e_2$(从$T_1$中删去$e_1$再加上$e_2$构成的图)是一棵生成树: • $T_2 − e_2 + e_1$ 也是一棵生成树. $1…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N,M<=50000a<=b<=N1操作中abs(c)<=N2操作中c<=Maxlongint UPD(2018-04-01):之前抄的树套树是真的丑到爆.今天用…
1452: [JSOI2009]Count Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2693  Solved: 1574 [Submit][Status][Discuss] Description Input Output Sample Input Sample Output 1 2 HINT 开心~自己写出了树套树[蒟蒻的欢愉] 颜色很少,区间也很小,对每种颜色开一个二维树状数组就好了 第一维表示x,对应x行的第二维树状数组 复杂度O(Q…
题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; + ; struct node { int a, b, c, num, val; }q[maxn], w[maxn]; bool cmp(node x, node y) { re…
TMD...这题卡内存卡的真优秀... 所以以后还是别用主席树的写法...不然怎么死的都不知道... 树套树中,主席树方法开权值线段树...会造成空间的浪费...这道题内存卡的很紧... 由于树套树已经不需要持久化了,直接动态开点就完事了...用主席树方法开过不去,要么超内存,要么越界... 大概思路...这题要求的[L,R]区间内,满足x<=a[i]<=y的连续的段数, 这题大概是个套路题,我们很容易想到,我们把连续的区间变成单点,把一段区间,类似1 1 1 3 5 变成 1 0 0 3 5…
P3380 [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在区间内的前驱(前驱定义为严格小于x,且最大的数,若不存在输出-2147483647) 查询k在区间内的后继(后继定义为严格大于x,且最小的数,若不存在输出2147483647) 注意上面两条要求和tyvj或者bzoj不一样,请注意 输入输出格式 输入格式: 第一行两个数 n,m 表示长度…
题面地址(权限题) 不用权限题的地址 首先说说怎么搞带修改主席树? 回忆一般的kth问题,我们的主席树求的是前缀和,这样我们在目标区间的左右端点的主席树差分下就能求出kth. 那么我们如何支持修改操作? 考虑到我们之前使用主席树朴素的维护区间前缀和,支持修改的话,只要把前缀和交给擅长它的树状数组维护,主席树只要维护下大概位置就好. 当然维护位置最好要离散化一下.我校某高傲的dalao直接写CTSC那道树上动态Kth,并且niubi地手写哈希维护. 别问我了在我写这篇文章的时候他还在debug呢.…
Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高速光缆组成. 每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部 门进行通信联络.该网络结构保证网络中的任意两个路由器之间都存在一条直接或间接路径以进行通信. 高速光 缆的数据传输速度非常快,以至于利用光缆传输的延迟时间可以忽略.但是…
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They have developed a more powerful system such that for N numbers a[1],…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 树套树,线段树套splay或者主席树套树状数组,我抄了一下hzwer的代码在zoj上过不了因为zoj的数据比较大不能像hzwer那种写法一样写成nlognlogn的空间. 没有bzoj权限号也不想再写一遍,随便放个代码在这里好惹. https://www.cnblogs.com/kuangbin/p/3308118.html  <-----这个写法的空间复杂度可以过…
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间维护一棵树,然后将小于key的数量累计起来,因为这种做法不能直接找第k大,而要二分然后来判断排名是否==k-1. ps:这里有个小地方我不能理解,是看绿云大神的代码的.就是二分那里,为什么最后还要return left,不是在二分里面当s==k-1的时候就return了吗.难道说还有其它原因??所以…
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是待修的主席树. 然后查询的时候,两个根节点减一下就可以了. 解法2--带修莫队 这是带修莫队的模板题. 最简单的莫队是是一个二元组\((l,r)\),这里引入了一个新的参数,变成了三元组\((l,r,t)\),\(t\)所表示的是在这个查询最前面的哪一个修改的编号. 然后我们这个\(t\)当做第三关…
滚回来更新,,, 在Day1我们学了最基本的线段树套平衡树 Day2开始我们要学习一些黑科技 (所以很大概率会出现Day3 w 1.线段树上的黑科技 这一段我们分几项来讲 1.权值线段树 权值线段树以权值为下标建树(就像求逆序对时用的树状数组),一开始所有节点都为0,通过线段树的区间极值,区间和来表示“这个区间上有多少个数”等信息. 下面这个代码并没有离散化因为我懒得写↓ #include <iostream> #include <cstdio> using namespace s…
您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义为小于x,且最大的数)5.查询k在区间内的后继(后继定义为大于x,且最小的数) 应xgy的邀来码树套树了...今天或许能码完这一篇吧...还在发烧,动态区间第k大(权值线段树套线段树or树状数组套主席树)估计码不完了 所以正好分成几天来写,写的细一点 这种题一般很明显...就是又有平衡树性质又有线段树性质应该就是线段树套平衡树…
前言 树套树是一个十分神奇的算法,种类也有很多:像什么树状数组套主席树.树状数组套值域线段树.\(zkw\)线段树套\(vector\)等等. 不过,像我这么弱,当然只会最经典的 线段树套\(Treap\) 啦. 线段树我相信大家都会的,\(Treap\)可以看一下这篇博客:简析平衡树(二)--Treap 基本思想 线段树套\(Treap\) 的思想其实非常简单. 简单的说,就是有一棵线段树,它的每一个节点都是一棵\(Treap\),每个\(Treap\)里面都存储了这个节点所表示的区间里的所有…
0XFF 前言 *如果本文有不好的地方,请在下方评论区提出,Qiuly感激不尽! 0X1F 这个东西有啥用? 树套树------线段树套平衡树,可以用于解决待修改区间\(K\)大的问题,当然也可以用 树套树------树状数组套可持久化线段树,但是 线段树套平衡树 更加容易理解,更加便于新手理解,所以一般也作为树套树的入门类别. 对于静态区间\(K\)大,我们可以用小巧精悍的主席树来做,也可以用强大无比的\(Splay\)来做.如果带修改,主席树就无能为力了,\(Splay\)也会变得很棘手难打…
题目链接 传送门 线段树\(+\)二分思路 思路 比赛看到这题时感觉是一棵线段树\(+\)主席树,然后因为不会带修改主席树就放弃了,最后发现还卡了树套树. 由于本题数据保证序列中相同的数字不会超过200个,因此我们将每个读入的数和修改之后的数一起离散化一遍,然后用一个\(vector\)记录每个数出现的下标,然后用线段树维护区间异或值.查询时就先查询得到的这个异或值\(num\)是否在离散化中出现过,不出现那么一定不会有\(a_i\)等于\(num\),此时答案就是\(R-L+1\):否则我们就…
study from: https://tiger0132.blog.luogu.org/slay-notes P3369 [模板]普通平衡树 #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <iostream> using nam…
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define maxn 100005 #define maxm 200005 #define maxk 2000005 using namespace std; ],ans[maxn],Ans[maxn],sum[maxn],fa[maxk],size[ma…
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define maxn 100005 #define maxk 6000005 using namespace std; int n,m,size,num[maxn],pos[maxn],tsum[maxn],t1[maxn],t2[maxn]; typed…
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 978  Solved: 476 Description 有N个位置,M个操作.操作有两种,每次操作假设是1 a b c的形式表示在第a个位置到第b个位置,每一个位置增加一个数c 假设是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. Input 第一行N.M 接下来M行.每行形如1 a b c或2 a b c Outp…
[题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状数组套平衡树,O(nlogn)的啊.. 别人家的CDQ分治更屌..我垃圾咯. 只是存个代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<…
[题意] 给定一个含有n个数的序列a[1],a[2],a[3]--a[n], 程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题.你需要编一个这样的程序,从输入文件中读入序列a,然后读入一系列的指令,包括询问指令和修改指令. 对于每一个询问指令,你必须输出正确的回答. 第一行有两个正整数n(1≤n≤10000),m(1≤m≤10…
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过不了. 思路非常easy,用线段树维护区间,用splay维护区间内的权值,然后询问的时候,二分答案key,然后在区间内找小于key的数有多少个. 贴上模板: #include<stdio.h> #include<string.h> #include<algorithm> #…
[BZOJ3262]陌上花开(树套树) 题面 对于权限题,我这种苦逼肯定是从别的OJ上搞的对不对??? CJOJ 洛谷 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb.显然,两朵花可能有同样的属性.需要统计出评出每个等级的花的数量. Input 第一行为N,K (1 <= N <…
国际惯例的题面(Bzoj没有,洛谷找的):动态加权逆序对,一眼树套树.256MB内存,5e4范围,不虚不虚.首先把交换改成两个插入和两个删除.考虑插入和删除的贡献,就是统计前面比这个值大的数的数值和,数量和,后面比这个值小的数的数值和,数量和.然后特判一下当前两个值构成逆序对的情况即可(因为这种情况会被计算两遍).考虑树状数组套动态开点线段树维护这个东西,线段树只需要单点修改区间求和即可,十分简单.然而数组开不下啊......理论上我们数组范围要开到2e7左右,然而并跑不满,开到1.4e7就足以…