————数据结构—————
zjyang12345
Keep calm&carry on
展开
-
主席树模板--POJ 2104 第K大 + SPOJ D-query区间次数和
主席树一般是用来记录没个数的出现次数,类似权值线段树,与普通线段树不同的是它每次只用更新一条链。不能再用堆存储,但是可以根据根结点编号定位,建立l,r,rts数组rts存每个位置的根节点编号,快速定位,l,r数组存储该根节点编号的左右儿子编号add操作写法变化不大,query写法看情况,目前有求第K大与求和两种写法第一题是递归找区间第K大,第二题是求区间出现次数和,第三...原创 2019-04-12 21:05:48 · 153 阅读 · 2 评论 -
个人赛C 柠檬树2--树链剖分+维护最值出现次数/LCA
给一棵树,维护上面两点最短路径中结点的最大值及最大值出现次数#include <stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn = 300010+10;#define inf 1000000005typedef pair<int...原创 2019-05-25 16:51:06 · 188 阅读 · 0 评论 -
LOJ504 ZQC的手办--线段树最值及位置+优先队列
#include <bits/stdc++.h>using namespace std;#define inf 1000000007typedef pair<int,int>pii;const int maxn = 500000+10;int n,m;int w[maxn];vector<int>ans;inline int read(...原创 2019-05-31 17:24:15 · 256 阅读 · 0 评论 -
LOJ 6029 市场--线段树区间更新之分块除法
题目链接参考链接一、题意:四种区间操作:加、除(向下取整)、询问区间和、询问最小值二、思路:第一想到的是将除d变成乘1/d,但是由于不一定是整除,所以除法和加法运算顺序不同,会影响结果。比如 3和3,先除2后加结果是2,先加后除2答案是3第二既然区间更新不好做,那可以暴力单点更新?显然这种第51号元素的做法妥妥的TLE~所以我们要想怎么保持区间更新,然后尽量把除法...原创 2019-05-17 20:55:05 · 486 阅读 · 0 评论 -
2019GDCCPC省赛补题BC
重现赛多组输入真烦→_→,感觉如果比赛,B和E有可能题意读错会WAB Build Tree关键:结点总数是个等比数列和#include <bits/stdc++.h>using namespace std;typedef long long ll;int k;ll m,n; ll p; ll a[300000]; ll mpow(ll a, ll b)...原创 2019-05-25 16:49:45 · 199 阅读 · 0 评论 -
LOJ 147 DFS序+ST表求LCA+树上差分
题目链接理解链接①先用dfs序或欧拉序把树转成区间,因为dfs序是前序遍历,根节点总在前面,而子树结点数,可以dfs时回溯求得,因此dfs序可以轻松维护子树的信息。②然后用树状数组维护每个点到根的距离(通过前缀和求),这题用树状数组因为只涉及区间加减的修改,复杂度常数比线段树小。(但树状数组局限性大,不支持乘除等复杂的修改)③最后如何求两点距离?树上差分(通俗理解,前缀和or子树和...原创 2019-05-11 08:53:12 · 598 阅读 · 0 评论 -
HDU 6483 A Sequence Game --ST表+莫队/主席树
莫队推荐链接One day, WNJXYK found a very hard problem on an Online Judge. This problem is so hard that he had been thinking about the solutions for a couple of days. And then he had a surprise that he mi...原创 2019-05-11 08:50:07 · 254 阅读 · 0 评论 -
POJ 3237 Tree /BZOJ 2157旅游 -- 树链剖分边权处理+取反
类似SPOJ QTREE模板题,还是要注意跳过LCA!!!(因为用最深的点权维护边权,LCA其实是上一个点的边权,不管update还是query)只不过多了个取相反数操作关于区间取相反数,如果是维护区间和,就加个负号;但如果是维护最大值,应该最大值最小值互换。注释部分,表示按位取反如何维护最值(与本题无关)①POJ 3237 Tree#include <stdio...原创 2019-05-17 20:56:40 · 217 阅读 · 0 评论 -
树链剖分--化树为线,化线为树
前置技能:LCA线段树/树状数组dfs序树上差分(有些用到,比如求每个LCA落在几条路径上)洛谷日报--差分树形DP(有些用到)参考1(图便于理解数组作用)参考2(讲解更细致)一.原理核心:将无规则的树形结构变成有规律的序列,再用数据结构(线段树,树状数组等)高效维护。如以下功能:update(赋值或四则运算)、query任意两点间路径上的点...原创 2019-05-11 08:54:35 · 241 阅读 · 3 评论 -
ST表--倍增区间DP处理RMQ
qq:一切问题没有他线段树解决不了的,但我懒得打那么长就学学这东东...(逃)多数参考洛谷题解一.简单介绍预处理:①区间DP 转移方程f[i][j] = max(f[i][j - 1],f[i + ][j - 1]) f[i][j]表示从i位置开始的后2^j个数中的最大值这里分成两半,一半是 即~ 和 ~②不过区间在增加时,每次并不...原创 2019-04-17 21:29:00 · 419 阅读 · 0 评论 -
HDU 2852--KiKi's K-Number 主席树无序第K大+删除结点
For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to design a container, the container is to support t...原创 2019-04-13 21:48:50 · 174 阅读 · 2 评论 -
HDU 4417 Super Mario--主席树+二分(查询前K大和)
STL二分还不是很能理解不同版本相减的操作,因此用个pushup证明自己是蒟蒻这样add只用更新一个点,再pushup回溯,每个结点就是区间和,而且query好写一些注意这题可以离线,因此可以二分找出要求的是第几大,但要特判找不到的情况(输出0)#include<cstdio>#include<algorithm>#include<iostrea...原创 2019-04-13 11:23:03 · 253 阅读 · 0 评论 -
春节十二响(树剖)
正解应该是启发式合并#include <stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;const int maxn = 200000+10;#define inf 10...原创 2019-05-31 17:23:41 · 172 阅读 · 0 评论