
ACM_数据结构
文章平均质量分 61
9974
这个作者很懒,什么都没留下…
展开
-
hdu 4601 Letter Tree 线段树
#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include using namespace std;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define ls rt<<1#d原创 2013-09-02 18:25:15 · 1136 阅读 · 0 评论 -
hdu 4638 树状数组
#include #include #include using namespace std;const int maxn = 100010;int n, m;bool vis[maxn];int c[maxn], a[maxn], pos[maxn];struct Query { int l, r, id; bool operator <(const Query原创 2013-09-02 19:14:42 · 922 阅读 · 0 评论 -
Splay题库(摘自www.notonlysuccess.com)
【splay入门】用其他平衡二叉树能解决:(理论复杂度没有sbt好,但我用splay却比写sbt还快=.=)[HNOI2002]营业额统计[NOI2004]郁闷的出纳员[HNOI2004]宠物收养所【splay热身】其他平衡二叉树不能解决,但是线段树和splay能解决(效率是线段树的1~5倍.)I Hate It(更新节点,区间最值)A Simple Problem转载 2013-08-30 23:10:21 · 1182 阅读 · 0 评论 -
hdu 4056 并查集处理线段树染色问题
这题方法很好,把询问离线倒着处理,当前的染色就一定有效。分析一下全部染完并查集是O(n)的。#include #include #include #include using namespace std;const int maxn = 50005;int n, m, Q;char op[maxn][15];int x[maxn], y[maxn], a[maxn],原创 2013-10-06 18:36:58 · 1893 阅读 · 0 评论 -
codeforces 253D 单调队列 好题
View Code #include #include #include using namespace std;char map[404][404];int a[404][404]; int n, m, k, sum;__int64 ans;int cnt[33]; int main(){ freopen("input.txt", "r"原创 2013-08-29 10:37:49 · 1300 阅读 · 0 评论 -
CF 86D Powerful array 分块算法入门,n*sqrt(n)
简介:分块算法主要是把区间划分成sqrt(n)块,从而降低暴力的复杂度,其实这算是一种优化的暴力吧,复杂度O(n*sqrt(n))题意:给定一个数列:a[i] (1有t个查询,每个查询l,r,对区间内所有a[i],求sigma(K[a[i]]^2*a[i])思路:离线+分块处理 分块和离线处理:将n个数分成sqrt(n)原创 2013-08-18 19:31:47 · 2419 阅读 · 2 评论 -
Codeforces Round #220 (Div. 2)(A,B,C,D)
比赛入口:http://codeforces.com/contest/374Code:https://github.com/9974/Codeforces/tree/master/220div2A.考虑4个角(x, y),然后x与a的差值 和y与b要同奇偶。这里少考虑了一个情况,导致挂了,就是a很大(a >= n)或b很大(b >= m)时, 该点一步都动不了,这情况要特判一下。原创 2013-12-19 18:03:44 · 1251 阅读 · 0 评论 -
Codeforces Round #225~229专辑
加*为好题,所有代码在github上 代码链接229Div2C 前缀和乱搞题D 简单构造题E ***线段树228Div1B***二进制构造最短路题C贪心的博弈题227Div2C***思维题D匈牙利算法裸题E数据结构维护226Div2C***数论小技巧题D简单状态压缩(带几何计算)E简单矩阵乘法原创 2014-02-22 20:14:12 · 1037 阅读 · 0 评论 -
Codeforces Round #232 (Div. 1)(A,B,C,D)
比赛链接: http://codeforces.com/contest/396代码链接: https://github.com/9974/Codeforces/tree/master/232div1A分解质因数, 对于每个质数单独考虑,假设质数2的指数为m, 那么我们要做的就是求 把m个2分配给n个数 的情况数用高中的挡板法得 C[m+n-1][n], 每个质数是相互独立的原创 2014-02-28 19:34:43 · 1264 阅读 · 1 评论 -
hdu4747 Mex 线段树 (2013网络赛)
题意:给你一个序列,让你求出对于所有区间的mex和,mex表示该区间没有出现过的最小的整数。思路:从时限和点数就可以看出是线段树,并且我们可以枚举左端点i, 然后求出所有左端点为i的区间内mex值的和。先把数插满,然后先询问后删除当前最左边的断点i。而且显然线段树里面保存的是mex值,而且这个序列是非递减的。分析:我们先预处理出对于右端点为i的所有的mex,分别插入线段树的i位置。然后原创 2013-09-18 13:25:54 · 1541 阅读 · 0 评论 -
hdu4760 字典树 (2013网络赛)
网络知识比较差,造成看题非常吃力。题目大意:有多个政策,每个政策里面有很多子网,E 表示加入一个政策,D表示禁止一个政策,F就是询问ip1,ip2是不是在同一个政策中。思路:子网有个特点前缀相同,对于E,不难想到有字典树来维护所有子网(即ip的前缀),每个节点用一个vector保存该子网(即前缀)所属于的所有政策的标号。对于D操作,我们用一个数组维护该政策可不可用,对于F就是先把ip1所在原创 2013-10-02 19:49:59 · 1620 阅读 · 0 评论 -
hdu 4677 并查集+分块算法 好题 (2013多校联合)
题意:点数n(n ), 边数(m q(1对于每个询问(l, r),去掉(l,r)区间以外的所有点和其相关联的边,问剩下来的图的联通块的个数。思路:分块+并查集分块算法入门:http://blog.youkuaiyun.com/auto_ac/article/details/10050589这题很容易想到分块, 难点是并查集的处理。对询问离线分块排序以后,我们对 左端点在相同块号内的询问原创 2013-08-30 23:01:33 · 2227 阅读 · 0 评论 -
Codeforces Round #198 (Div. 1)(A,B,C,D)
http://codeforces.com/contest/341赛后做的虚拟比赛,40分钟能出了3题,RP爆发。A计数问题我们可以对每对分析,分别对每对(a走到b)进行统计,那么这对产生的期望为distance(a, b)/n(把这一对选出来以后相当于一个点,那么分子distance(a, b)*(n-1)!,分母n!, (n-1)被约掉了。)这样的算法是O(原创 2013-09-01 23:49:32 · 1452 阅读 · 0 评论 -
POJ 2528 Mayor posters 线段树成段更新入门题
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2011][2013,+∞]这些值,所以我只需要1000,1990,2000,2012就够了,将其分别原创 2013-08-29 10:32:14 · 823 阅读 · 0 评论 -
POJ 4026 Eve 并查集模拟题
哈哈View Code #include#includestring.h>#includeusing namespace std;#define maxn 300003int vis[maxn];struct node{ int sex, fa, de, DNA; // sex性别,fa父亲节点, de是不是死了;}p[maxn];i原创 2013-08-29 10:35:44 · 803 阅读 · 0 评论 -
线段树第一集(单点更新)
代码风格:notonlysuccess。 单点更新:最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来。 很基础的,notonlysuccess里面有的, 先学学它里面的吧。网站: http://www.notonlysuccess.com/index.php/segment-tree-complete/ 以下是noton原创 2012-09-02 22:54:19 · 1270 阅读 · 0 评论 -
LA 4239 树状数组
题目链接离散化一下(1---n),当插入第i个人时(这个人视作裁判, i从0开始), 假设这个人插入的位置为j,设 t=sum(j) 则 1. 在i之前更新的,值比i小的人数为 t个2. 在i之后更新的,值比i小的人数为(i-t)个3. 在i之前更新的,值比i大的人数为(n-i-j+t)个4. 在i之后更新的,值比i大的人数为(j-1-t)个所以对于每个i,则有ans +=原创 2013-02-02 21:56:15 · 926 阅读 · 0 评论 -
POJ 2761 树状数组+二分+离线
关键:1.离线操作:将询问区间从左到右排序,然后依次插入区间内的值,在处理下一个询问时,删去上个询问插入的但当前询问不需要插入的数。m次询问总体复杂度为 2nlog(n). 2.本题注意要离散化3.二分(手写upper_bound)来查询第k小的数#include #include #include using namespace std;#define maxn原创 2013-01-11 16:36:18 · 979 阅读 · 0 评论 -
UVa 11235 RMQ好题
题目链接题意:给你一个不下降序列(n ) (q )找出出现次数最多的数所对应的出现次数。思路:显然我们对于每个询问我们要做到 O(1)输出,所以我们要做满足这一条件的预处理。注意序列式不下降的,所以每个数值都是连续的一段,我们可以把这序列压缩。 如 -1 -1 3 3 5 5 5 可以表示成 (-1,2), (3, 2), (5, 3) 三段(a,b)a表示数值,b表示个数。原创 2013-02-02 23:23:56 · 1158 阅读 · 0 评论 -
UVa 11020 排序二叉树
题目链接题目大意:有n个人,每个人有两个属性x,y,如果对于一个人P(x,y),不存在另外一个人(a,b),使得a动态插入每个人,要求统计当前已经插入的人中, 有优势的人的个数。注意可能出现2个人的x,y都相等的情况,即重复。思路:用二叉树保存已插入而且有优势的人的信息。先按x小的排,再按y小的排, 把每个人看成一个点操作。插入操作:当我们要插入一个点p时, 先判断其是原创 2013-01-28 16:11:10 · 1351 阅读 · 0 评论 -
LA 3938 线段树区间更新
题目链接题意: 给你一个序列 (n 如果只求和,那么这题还算比较顺手, 但求下标,节点保存的数据比较多,导致更新的时候很容易出错,其实题目本身还是很容易想到的,只是比较麻烦,锻炼查错能力。思路;对于某一区间最值的更新:1. 左区间的最值2 右区间的最值3 左区间的最大后缀和 + 右区间的最大前缀和对于最大前缀和的更新:1 左区间的最大前缀和原创 2013-02-06 13:49:45 · 1721 阅读 · 0 评论 -
POJ 1436 Horizontally Visible Segments 线段树 成段更新
View Code #include#includestring.h>#include#includeusing namespace std;const int maxn = 80001;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define mid int m = (l + r)>>1in原创 2013-08-29 10:37:12 · 963 阅读 · 0 评论 -
POJ 3667 Hotel 线段树 区间合并 入门题
View Code #include#includestring.h>#includeusing namespace std;#define maxn 50003#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define mid int m = (l + r)>>1int col[maxn2];原创 2013-08-29 10:37:15 · 874 阅读 · 0 评论 -
POJ 2528 Mayor posters 线段树 成段更新
注意离散化View Code #include#includestring.h>#includeusing namespace std;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#define mid int m = (l + r)>>1#define maxn 10004int col[ma原创 2013-08-29 10:37:08 · 895 阅读 · 0 评论 -
POJ 2823 Sliding Window 双端队列入门题
今天比赛因为不会双端队列卡了几道题,今天好好学学。 双端队列一般保存2个值, 原数组的下标,数组中的值。View Code #include#includestring.h>#includeusing namespace std;#define maxn 1000003int a[maxn];int n, m;struct Queue{原创 2013-08-29 10:35:37 · 921 阅读 · 0 评论 -
Codeforces Round #234 (Div. 2)(完全)
比赛链接:http://codeforces.com/contest/400/代码链接:https://github.com/9974/Codeforces/tree/master/234div2A, B, C水题D dfs判联通性+floyd最短路E 按位拆成线段树,线段树区间合并问题原创 2014-03-07 17:34:01 · 1286 阅读 · 0 评论