ACM-数据结构
文章平均质量分 73
wsniyufang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 1195 二维树状数组
/* 二维树状数组模版题 */ #include #include #include #include using namespace std; int c[1030][1030]; int Row,Col; inline int Lowbit(const int &x) {原创 2011-07-22 20:01:26 · 556 阅读 · 0 评论 -
从第K 元素看数据结构
从第K 元素看数据结构 这篇文章讨论的是序列中第K 大或第K 小元素,由于第K 大元素可以转化为求第N-K+1 小元素(N 为序列的长度),所以,本文专注于讨论第K 小元素。 本文讨论的几个问题: 1. 对给定整数序列,求该序列中第K 小的元素。 2. 对某一整数序列,转载 2011-08-30 10:31:14 · 1298 阅读 · 0 评论 -
集训队例赛——20110925 解题报告
//注释不是很多,读懂代码需要耐心。。。。。。读不懂可以在下面留言,我尽量回复。 //希望大家都写赛后总结——写在自己人人或者空间博客内,没写出1002和1004的应该反思一下最近的状态了。。。 /* 1001 开始用dfs递归,爆栈了 后来模拟又因为 出迷宫的条件一直wa,细原创 2011-09-25 22:30:16 · 1334 阅读 · 0 评论 -
POJ 2761 树状数组离线+离散化 附:线段树解法
#include #include #include #include #include #include #include #include #include #include using namespace std; const int N=100009; c原创 2011-08-30 19:09:56 · 1217 阅读 · 0 评论 -
HDU 2852 树状数组解决第K小数 附线段树解法
/* 题意: 三种操作 0 x:向容器里加入x; 1 x: 在容器内删除x,不存在x则输出“No Elment” 2 x y:在容器中找到大于x的第y个数,没有则输出“Not Find” 题解: 树状数组 操作1:直接add(x,1) 操作2:查找sum(x)和sum(x-1),原创 2011-08-30 18:29:23 · 2143 阅读 · 0 评论 -
HDU 3938 离线并查集
/* 离线并查集,边按小到大排序,询问也按小到大排序; 对于询问x,答案就是询问x-1的值加上询问x-1的L1和询问x的L2之间的边合并带来的值 对于一条属于L1和L2之间的边,如果端点u,v在一个集合中,忽略,否则新开的路是u 所在集合的大小乘上v所在集合的大小 */ #inc原创 2011-09-27 15:21:19 · 1004 阅读 · 0 评论 -
Dancing Link 精确覆盖模版
#include #include #include const int Row=9; const int MAX_COLOUMN = Row*Row*4+2;//最多出现列数 const int MAX_ROW = Row*Row*Row+2;//最多出现的列数 int c原创 2011-10-09 18:17:35 · 748 阅读 · 0 评论 -
poj 3076 Dancing Link
#include #include #include #include #include #include #include const int MAX_COLOUMN = 16*16*16;//最多出现列数 const int MAX_ROW = 16*16*16+2;//最多原创 2011-10-09 17:38:12 · 995 阅读 · 0 评论 -
HDU 3231Box Relations 拓扑排序
/* 分别对x,y,z topsort就ok了 注意有公共部分的时候的建边 */ #include #include #include #include #include #include #include #include #include using namespace std; int n,r; char s[3]; int x,y; int inx[1009*2]; int原创 2011-10-20 11:16:15 · 1459 阅读 · 0 评论 -
HDU 3234 Exclusive-OR 并查集变形
/* 转自:http://www.cppblog.com/Yuan/archive/2010/09/02/125667.html?opt=admin稍许改写 有n(n<=20000)个未知的整数X0,X1,X2Xn-1,有以下Q个(Q<=40000)操作: I p v :告诉你Xp=v I p q v :告诉你Xp Xor Xq=v Q k p1 p2 …转载 2011-10-20 11:11:39 · 1840 阅读 · 1 评论 -
hdu 4107 Gangster 线段树
/* 操作a b c:[a,b]区间上的节点加上c,若节点的值已经超过P(包括等于),则加上2*c 最后求每个节点的值 和hdu3954很类似,具体参考:http://blog.csdn.net/wsniyufang/article/details/6702560 每个区间设定min_dis; 当区间中有一个点超过P时,释放lazy */ using namespace std; const in原创 2011-10-30 21:26:01 · 1484 阅读 · 0 评论 -
hdu 4109 Instrction Arrangement 拓扑排序 关键路径
/* 给定一个关系网,A B C表示B必须在A后,间隔为C,允许多线程同时操作 最后求最短的时间把所有任务完成 解法: 关键路径 topsort维护每个节点最早可以完成的时间 */ #include #include #include #include #include using namespace std; struct node { int y,t; }edge[10009]; in原创 2011-10-30 21:30:22 · 1972 阅读 · 3 评论 -
CodeForces Round #112 Div2 165 D. Beard Graph
/* 题目给定一棵树,这棵树很特殊,只有根节点的度可能超过2 有三种操作 1.把编号为x的边染成黑色 2.把编号为x的边染成白色(此时这条边不可以走) 3.询问x,y之间的距离(不能走到输出-1) */ #include #include #include #include #include #include #include #include using namespace std; con原创 2012-03-26 14:40:36 · 2376 阅读 · 0 评论 -
poj 4047 Garden 2012金华邀请赛 线段树
/* 三种操作 0 x y 把x位置的值改成y 1 x y 交换x与y位置的值 2 x y 统计[x,y]中连续k个值的最大值 我们把1-k的和值作为b[1],2-(k+1)的和值作为b[2],以此类推 那么可以建立一棵[1,n-k+1]的线段树 求连续k个和的最大值,退化为求某个区间的最值问题 线段树中有延迟操作,优化时间效率 */ #include #include #include #原创 2012-07-07 21:00:31 · 3502 阅读 · 0 评论 -
HDU4331 Image Recognition 树状数组+扫描线
#include #include #include #include #include #include using namespace std; const int maxn=1009; int c[maxn]; int m[maxn][maxn]; int L[maxn][maxn],R[maxn][maxn],U[maxn][maxn],D[maxn][maxn]; int n; stru原创 2012-08-04 21:28:52 · 2305 阅读 · 0 评论 -
HDU 4339 Query 树状数组
#include #include #include #include #include using namespace std; const int maxn=1000009; int c[maxn]; char s1[maxn],s2[maxn]; struct bit { int lowbit(int x) { return x&-x; } v原创 2012-08-04 21:31:05 · 2177 阅读 · 0 评论 -
ZOJ 3508 The War
/* 水贪心,不解释 */ #include #include #include #include #include #include using namespace std; int n,m; struct point { int Min,Max; }p[40009];原创 2011-08-28 22:02:07 · 711 阅读 · 0 评论 -
STL set和multiset的使用
C++ STL set和multiset的使用 1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同原创 2011-08-28 22:00:46 · 589 阅读 · 0 评论 -
矩形面积并
#include #include #include #include using namespace std; typedef double Type; #define ll double #define maxn 200200 // 垂直线段 struct VLine原创 2011-09-22 20:56:43 · 1696 阅读 · 0 评论 -
scu 四川大学oj 2745 零序列 典型线段树
典型线段树,模版题 #include#include#include#include#include#include#include#include#includeusing namespace std;#define MAX 100001struct node{ int原创 2011-07-10 23:50:19 · 1577 阅读 · 1 评论 -
POJ 2481Cows 树状数组
/* 这个题大概是计算,一个区间会被多少区间覆盖的问题: 标准做法:套用别人写的 给定 n 个区间 (l, r),问每个区间被多少个另外的区间所包含。 包含的定义 (l1, r1), (l2, r2),如果 l1 <= l2 < r2 <= r1 && (l1, r1) !=原创 2011-07-23 01:30:57 · 739 阅读 · 0 评论 -
HDU 3874 Necklace 2011 Multi-University Training Contest 4 - Host by SDU 树状数组+离散化
/* 题意为查找区间去重后的和 用树状数组离线处理 将所有查询以右端点从小到达排序 按次顺序边去重边查询 前面的去重就不会影响到后面的结果了 */ #include #include #include #include #include #include #include us原创 2011-07-28 03:00:22 · 1106 阅读 · 0 评论 -
scu四川大学oj 3099 A Simple Problem with Integers
题目出处http://cs.scu.edu.cn/soj/problem.action?id=3099线段树题目中有一个操作是为某个区间的所有成员加上c;用 d表示此时整个区间所有元素的增量 #include using namespace std;#define ll long原创 2011-07-10 23:57:20 · 3802 阅读 · 1 评论 -
HDU 3887 Counting Offspring 树状数组
/* 题意:1-n在一棵树上,给定边的关系。要求得到每一个顶点的后继节点中比它值小的个数 题解:树状数组。dfs过程中,进入一个节点x前求一次sum(x-1),然后add操作,递归返回节点x后再求一次sum(x-1) 两次sum操作的差值就是比x小的个数 本题数据量大原创 2011-08-28 11:35:13 · 1279 阅读 · 6 评论 -
HDU 3974 Assign the task 2011 Multi-University Training Contest 14 - Host by FZU 线段树
/* 题意:给定点的上下级关系,规定如果给i分配任务a,那么它所有的下属(直接或间接)都得放弃手上任务开始进行任务a 给你一个序列,T a b,把任务b分配给a节点,C a 查询a正在进行的任务。 非常经典的线段树题目 从树的根节点向下递归并对每个节点i按序编号为le原创 2011-08-27 18:41:05 · 1225 阅读 · 0 评论 -
HDU 3890 Apparent Magnitude 树状数组+离散化
/* 我们要找到在a,b左下方点的个数和权值和,只需要把x坐标不大于a的y值插入树状数组,然后统计y值小于b的个数个他们的权值和就行了。所以要得到正确答案,必须插入和查询同时进行(离线操作)——只有只插入x不大于a的y值的情况下统计出来才是正确答案。当然,由于y值范围大,值可能原创 2011-08-23 12:42:28 · 1010 阅读 · 0 评论 -
hdu 1824 && hdU 3062 2-SAT经典
/* HDU 3062 */ #include #include #include #include #include #include #include #include using namespace std; co原创 2011-09-02 01:05:44 · 1843 阅读 · 1 评论 -
hdu 3622 2-sat经典问题
/* 典型的2-sat题目 二分半径 两点x,y有冲突,就把x连一条到yy(即y的对立点),y连一条到xx 然后求强联通分量,如果存在x到xx属于一个联通分量,则不符合条件 */ #include #include #include #include #inclu原创 2011-09-01 23:25:50 · 1278 阅读 · 0 评论 -
hdu 4000 Fruit Ninja 树状数组+统计
/* 比赛的时候没有写出来,赛后请教大牛后写的 可以先求出(xyz,xzy)的总数量 只需出去x后面多少个比它大的个数n,C(n,2)就是了 然后求出xyz的个数, 对于a,求出比a小的个数low[a],比a大的个数high[a],low[a]*high[a]就是答案 可以借助树原创 2011-09-02 21:32:29 · 1450 阅读 · 0 评论 -
coj 1123 带区间操作的线段树(lazy)
Light Switching Time Limit:3000MS Memory Limit:65536K Total Submit:183 Accepted:42 Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中原创 2011-08-06 01:43:27 · 881 阅读 · 0 评论 -
树状数组模版
struct bit{ int c[maxn] ; void init(){ memset(c , 0 ,sizeof(c)); } int lowbit(int x){ return x&(-x);原创 2011-08-30 17:43:38 · 661 阅读 · 0 评论 -
HDU 3911 Black And White 2011 Multi-University Training Contest 8 - Host by HUST 线段树应用
/* 1表示黑,0表示白, 0 a b 表示询问区间[a,b]中最长连续黑石子的数目 1 a b 表示翻转区间[a,b]内的黑白 */ #include #include #include #include #include #include #include #include原创 2011-08-06 16:32:15 · 831 阅读 · 0 评论 -
poj 1986 LCA离线模版 并查集模版
//临时学的tarjan离线LCA,解题报告有空补上,ps:并查集类很给力#include #include #include #include #include #include using namespace std; const int V=40010,E=V*2,Q=20原创 2011-09-03 00:39:56 · 1429 阅读 · 0 评论 -
HDU 3954 Level up 2011 Alibaba Programming Contest 线段树
/* 参考:http://hi.baidu.com/yy17yy/blog/item/3fbaaced633cc3cb2e2e21c8.html 线段树的变形,比赛的时候一直tle和mle交替,后附tle和mle的代码 和经典的线段树区间lazy操作相比,区间传递的是经验系数,每原创 2011-08-19 17:06:47 · 2105 阅读 · 3 评论 -
zoj 3602 Count the Trees 树的同构
/* 二叉树的同构 把每棵子树映射为一个整数 如节点n的左右孩子为L,R,那么取子树L对应的整数Ln 子树R对应的整数Rn,把pair(Ln,Rn)对应为一个整数就是 当前子树的映射 */ #include #include #include #include #include #include #include using namespace std; const int maxn=10000原创 2012-08-06 00:54:35 · 3328 阅读 · 0 评论
分享