随笔分类 -  ---数据结构---

摘要:题目链接:hdu 3726 Graph and Queries 题意: 最开始给你n个点,每个点最开始有一个权值,并且都是独立的,现在给你m条边,表示对应的两个点是连接的。 现在有三种操作: Q x k,表示询问与x这个点联通的所有点中第k大的权值。 D x,表示删除第x条边。 C x y,表示改变 阅读全文
posted @ 2017-01-17 14:39 bin_gege 阅读(209) 评论(0) 推荐(0)
摘要:题目链接:hdu 1890 Robotic Sort 题意: 给你n个数,每次找到第i小的数的位置,然后输出这个位置,然后将这个位置前面的数翻转一下,然后删除这个数,这样执行n次。 题解: 典型的splay区间翻转+删点。 我们把数据排序,然后记录一下每个数原来的位置,然后splay建树的时候用原来 阅读全文
posted @ 2017-01-14 18:36 bin_gege 阅读(147) 评论(0) 推荐(0)
摘要:题目链接:hdu 5997 rausen loves cakes 题意: 给你n个点,每个点有一个颜色,现在有两个操作,第一个操作,将颜色x改为颜色y,第二个操作,询问[x,y]区间有多少颜色段(颜色段的定义为从左往右相同的颜色为一段,遇到不相同的为下一段,ie:144112为4段颜色) 题解: 对 阅读全文
posted @ 2016-12-18 13:20 bin_gege 阅读(422) 评论(0) 推荐(0)
摘要:题目链接:hdu_4918_Query on the subtree 题意: 给出一颗n个点的树,每个点有一个权值,有两种操作,一种是将某个点的权值修改为v,另一种是查询距离点u不超过d的点的权值和。 题解: 这里可以去膜膜鸟神的博客。 简单来说就是对树的每个重心建立两个树状数组,然后对于每个点修改 阅读全文
posted @ 2016-12-02 13:25 bin_gege 阅读(585) 评论(0) 推荐(0)
摘要:题目链接:hdu_4742_Pinball Game 3D 题意: 给你n个点,让你求三维的LIS,并且求出有多少种组合能达到LIS。 题解: 求三维的LIS,典型的三维偏序问题,x排序,解决一维,cdq分治y,解决一维,树状数组维护z,解决一维。 注意,cdq中sort不要调用太多,不然会被卡常。 阅读全文
posted @ 2016-11-22 17:35 bin_gege 阅读(144) 评论(0) 推荐(0)
摘要:题目链接:hdu_5354_Bipartite Graph 题意: 给你一个由无向边连接的图,问对于每一个点来说,如果删除这个点,剩下的点能不能构成一个二分图。 题解: 如果每次排除一个点然后去DFS判是否为二分图,那肯定会超时。 我们可以知道,删除其中一个点,对其他好多的边都不会有影响,所以我们可 阅读全文
posted @ 2016-11-21 12:26 bin_gege 阅读(235) 评论(0) 推荐(0)
摘要:题目链接:hdu_5324_Boring Class 题意: 给出n个二维点对,求LIS长度和编号字典序最小的LIS(x非增,y非减) 题解: dp[i]=max(dp[j]) (i>j,l[i]>=l[j],r[i]<=r[i]) 一看就是三维偏序问题。 如果树套树写的好,空间开的大的话,一样可以 阅读全文
posted @ 2016-11-12 17:42 bin_gege 阅读(336) 评论(0) 推荐(0)
摘要:题目链接:hdu_5618_Jam's problem again 题意: 给你n个点,每个点有一个坐标(x,y,z),找出有ans个点,3个坐标都比该点小,这个点的level就为ans,然后让你输出所有点的ans. 题解: 对于第一维,直接排序,后面两维的处理可以用线段树套lowbit,但空间用的 阅读全文
posted @ 2016-11-10 21:10 bin_gege 阅读(240) 评论(0) 推荐(0)
摘要:题目链接:hdu_5193_Go to movies Ⅱ 题意: 有n个人站成一排,每个人的身高为Hi。每次有人加入或者有人离开,就要判断有多少人站反了(i < j&&Hi>Hj) 第一行n,m,接下来n个整数(n,m<=2e4) 接下来m行, 0 x y 表示有一个身高为y的人插在x后面,x=0表 阅读全文
posted @ 2016-11-07 21:16 bin_gege 阅读(272) 评论(0) 推荐(0)
摘要:题目链接:hdu_5961_传递 题意: 中文,不解释 题解: 上bitset卡常,很优美的就过去了 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef 阅读全文
posted @ 2016-11-05 20:06 bin_gege 阅读(233) 评论(0) 推荐(0)
摘要:题目链接:hdu_5286_wyh2000 and sequence 题意: 给一段长度为N的序列,每次询问l-r(l和r和上一次询问的答案有关)内 不同的数的 出现次数的次方 的和。强制在线 题解: 这里贴个达哥的题解: 大体思路就是,把n个数分成sqrt(n)块,每块sqrt(n)个数,然后求出 阅读全文
posted @ 2016-10-26 21:35 bin_gege 阅读(131) 评论(0) 推荐(0)
摘要:题目链接:hdu_5919_Sequence II 题意: 给你n个数,m个询问,每次问你一个区间中每一种数在区间中第一次出现的位置的中位数,强制在线。 题解: 一看就是主席树搞,不过这里要询问第一次出现的位置,有个技巧就是倒着将数插进去,如果有相同的数,就把位置靠后的数的贡献取消掉,这样查询的时候 阅读全文
posted @ 2016-10-25 21:50 bin_gege 阅读(132) 评论(0) 推荐(0)
摘要:题目链接:hdu_5036_Explosion 题意: 一个人要打开或者用炸弹砸开所有的门,每个门里面有一些钥匙,一个钥匙对应一个门,有了一个门的钥匙就能打开相应的门,告诉每个门里面有哪些门的钥匙,问需要用的炸弹为多少。 思路: 考虑每个点需要用炸弹打开的概率,那么所有点的概率之和就是解。首先用bi 阅读全文
posted @ 2016-10-19 22:02 bin_gege 阅读(254) 评论(0) 推荐(0)
摘要:题目链接:hdu_5790_Prefix 题意: 给你n个字符串,字符串总长度不超过10W,然后给你一个区间,问你这个区间的字符串不相同的前缀有多少个。 题解: 由于z与上一个答案有关,所以强制在线,区间询问可以用主席树搞搞。 不同前缀的话,我们可以用一个trie来记录每一个节点的最晚出现时间,也就 阅读全文
posted @ 2016-10-13 19:19 bin_gege 阅读(155) 评论(0) 推荐(0)
摘要:题目链接:hdu_5788_Level Up 题意: 有一棵树,n个节点,每个节点有个能力值A[i],mid[i],mid的值为第i节点的子树的中位数(包括本身),现在让你将其中的一个节点的A值改为1e5,问所有的mid的和最大问多少。 题解: 我们可以知道,如果改变其中一个的A[i],如果A[i] 阅读全文
posted @ 2016-10-05 22:13 bin_gege 阅读(224) 评论(0) 推荐(0)
摘要:题目链接:hdu_4417_Super Mario 题意: 给你n个树,有m个询问,每个询问有一个区间和一个k,问你这个区间内不大于k的数有多少个。 题解: 考虑用主席树的话就比较裸,当然也可以用其他的写 1 #include<bits/stdc++.h> 2 #define F(i,a,b) fo 阅读全文
posted @ 2016-10-03 23:24 bin_gege 阅读(153) 评论(0) 推荐(0)
摘要:题目链接:hdu_5884_Sort 题意: 有n个数,每个数有个值,现在你可以选择每次K个数合并,合并的消耗为这K个数的权值和,问在合并为只有1个数的时候,总消耗不超过T的情况下,最小的K是多少 题解: 首先要选满足条件的最小K,肯定会想到二分。 然后是如何来写这个check函数的问题 我们要贪心 阅读全文
posted @ 2016-09-19 23:24 bin_gege 阅读(481) 评论(0) 推荐(0)
摘要:题目链接:hdu_5877_Weak Pair 题意: 给你一棵树,让你找有多少对满足那两个条件的weak pair 题解: 有人用Treap,我不会,然后我用树状数组+离散来替代Treap,用DFS搜到叶子,然后在树状数组中找小于k/a[u]的个数,注意a[u]可以为0,要处理一下 1 #incl 阅读全文
posted @ 2016-09-11 20:04 bin_gege 阅读(200) 评论(0) 推荐(0)
摘要:题目链接:hdu_5862_Counting Intersections 题意: 给你与坐标轴平行的线段,问你交点数 题解: 实质就是扫描线,这里我用树状数组来记录,所有线段按X坐标排序,遇到横线段的左端点就对应y坐标+1,遇到右端点,就对应y坐标-1,遇到竖线段,就询问对应的区间段 1 #incl 阅读全文
posted @ 2016-08-25 14:29 bin_gege 阅读(168) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 题意: 给你一些操作,往一个集合插入和删除一些数,然后?x让你找出与x异或后的最大值 题解: trie树xjb搞就行,每次要贪心,尽量满足高位为1. 1 #include<bits/s 阅读全文
posted @ 2016-08-12 18:36 bin_gege 阅读(131) 评论(0) 推荐(0)