数据结构
文章平均质量分 66
未水
这个作者很懒,什么都没留下…
展开
-
poj 2104 归并树
每次查找二分出某个数,logn时间在树中找到它的区间,二分找比它小的数的个数,三次二分= (log n)^3解决的问题:查询某个区间内第k大的数值得注意的是:1.归并树,划分树都只能解决元素不重复的情况2.多个x有相同rank的时候取最大的x这些相同rank的数组成一个序列A1,A2,……An,之间两两不同,因为没有重复元素若答案不是An而是Ai(1原创 2012-10-14 00:59:16 · 896 阅读 · 2 评论 -
poj线段树专题
poj 2528 水题#include #include #include using namespace std;#define N 40500int n;struct node{ int l,r,flag;}tree[N*4];struct Inter{ int l,r;}inter[N];int vis[N];int max(i原创 2012-10-31 11:47:33 · 4602 阅读 · 0 评论 -
hdu4358 树状数组-非常经典
碰到过类似这题几次都做不出,只因为始终不理解这题值得推荐的理由:离散化,树形转化为数组的线性结构,离线做法,树状数组,排序后边插入边询问等多种处理技巧1.深搜后树上的某点的子树变成数组的一个区间,网上有人估计写挫了,说会爆栈,我不会,最好不用vector,会TLE,这题数据挺强的,后来改了邻接表过了,事实证明,邻接表还是时间空间都有很好效果的做法2.讲询问按右端点排序,每次插入更新原创 2012-10-19 16:47:37 · 1348 阅读 · 1 评论 -
UVA Live 5029 Encoded Barcodes 字典树-水题
轻松1A无压力#include #include #include #include #include using namespace std;const int bk=26;struct node{ int val; node* nxt[bk]; node() { val=0;memset(nxt,0,sizeof(nxt)); }}*root;int n,原创 2012-10-13 16:49:11 · 617 阅读 · 0 评论 -
zoj 3724 树状数组经典
问题:n个点,对于每个点i,都有一条连向i+1的有向边,另外有m条其他的有向边,有q个询问(u,v)求u到v的最短路将m条有向边和q个询问对所表示的点对一起排序,(u,v)u大的排前,u一样的v小的排前,u和v一样大的先处理插入的再处理询问的;边插入边询问;树状数组里存的是右端点在v之后的询问的结果的差值(1)对于(u,v)uv) 的那些还没插入,树状数原创 2013-07-18 19:56:34 · 1585 阅读 · 0 评论 -
hdu 4630 多校第二场 树状数组,离线处理
1-n的排列,询问(l,r)之间的最大的gcd(a,b)(1)离线处理,询问对按右端点排序,边插入边查询,使在处理(l,r)时,(l,r)内的该插入的已经插入(2)枚举每个数的约数,记录到当前位置为止,上一个x的倍数出现的位置prev(x)#include #include #include #include #include using namespace std;原创 2013-07-31 18:01:53 · 914 阅读 · 0 评论 -
hdu 4638 多校第四场 树状数组+离线处理
#include #include #include #include using namespace std;#define N 100500int b[N];int a[N],n,m,pre[N],ans[N];struct Q{ int l,idx; Q(int _l,int _idx) { l=_l;idx=_idx; }原创 2013-08-02 08:35:05 · 650 阅读 · 0 评论 -
主席树详解 zoj 2112 (单点更新)+ poj 2104 区间第k大
解决问题:单点更新,区间询问第k大的数是多少缺点:容易MLE复杂度:n*logn*logS (n个数,离散化后有S个不同的数)1.树状数组套线段树:树状数组表示区间,理论上树状数组上每个元素对应一棵线段树,线段树rank区间在[l,r]的数已经有多少个,所有的线段树的结构都是一样的2.离线操作,离散化,排序:离散化知道整个操作过程要有哪些数,排序后知道他们的rank是多少,rank原创 2013-08-04 15:06:21 · 3131 阅读 · 0 评论 -
hdu 4677 并查集+离线+构造 无向图上连续区间的连通块数目
把n个点按sqrt(n)的大小划分,第i个区间表示【1,sqrt(n)*i】的连通关系,离线处理,从后往前边插入边询问,插入u点时,如果[u,v]的v点在区间内,就放在同一集合有u点的询问对【u,v】时,由于v之前的那个区间的连通关系已经处理好,只须处理v所在区间的起点到v这个区间的连通关系这个区间不超过sqrt(n)个点,每个点有m/n条边(由于数据是随机产生的),每次复杂度是m/n原创 2013-08-25 10:24:31 · 1647 阅读 · 0 评论