2013年6月22日

hdu3487 Play with Chain

摘要: 维护无序序列。结点信息包括flip和s。cut操作:void cut(int a, int b, int c) { Node *left, *mid, *right, *o; split(ss.root, a, left, o); split(o, b-a+1, mid, right); ss.root = merge(left, right); split(ss.root, c+1, left, right); ss.root = merge(merge(left, mid), right);} 阅读全文

posted @ 2013-06-22 12:44 Ac_coral 阅读(130) 评论(0) 推荐(0) 编辑

poj3481

摘要: 维护有序序列,根据输入找到优先级最小/最大 的那个结点,输出编号,然后删除该结点。假设虚拟结点的v值为-INF,保证序列有序的插入。void highest_priority() { //printf ( "cnt=%d\n", cnt ); if ( cnt == 1 ) { printf ( "0\n" ); return; } Node *left, *mid, *right; split(ss.root, cnt-1, left, right); printf ( "%d\n", right->client ); ss. 阅读全文

posted @ 2013-06-22 08:45 Ac_coral 阅读(168) 评论(0) 推荐(0) 编辑

[HNOI2002]营业额统计

摘要: 大早晨被数据坑,测试数据结尾有丢0的情况;if(scanf("%d",&x) == EOF) x = 0;加上这句就能过。维护有序序列,查找小于x的最大值,大于x的最小值。虚拟结点的v要赋值为-INF, null结点的v赋值为INF;splay只需要维护 结点总数s 信息,不需要pushdown()操作。int find_low(int x) {//小于x的最大值 Node *p = ss.root, *ret = null; while ( p != null ) { if ( p->v <= x ) ret = p, p = p->ch[1]; 阅读全文

posted @ 2013-06-22 07:22 Ac_coral 阅读(166) 评论(0) 推荐(0) 编辑

2013年6月21日

poj3468 A Simple Problem with Integers

摘要: 普通序列,区间更新,区间查询。区间更新:每个结点的sum信息,表示以这个结点为根的所有子树结点的和,包括根结点。void add(int a, int b, int c) { if(a > b) swap(a, b); Node *left, *mid, *right, *o; split(ss.root, a, left, o); split(o, b-a+1, mid, right); mid->v += c; mid->sum += (i64)c*mid->s; mid->lazy += c; ss.root = merge(merge(left, mid) 阅读全文

posted @ 2013-06-21 17:48 Ac_coral 阅读(153) 评论(0) 推荐(0) 编辑

[NOI2004]郁闷的出纳员

摘要: 本题涉及到的操作有:单点插入,区间更新,删除比x小的数,询问第k大的数。可以用splay维护一个有序的序列。先给splay分配一个虚拟结点,虚拟结点的v等于-INF,这样保证了虚拟结点的左儿子始终为null。。插入操作:计算比x小的数的个数k,对原序列split。。。有序插入,使得序列始终保持 -oo 10 20 30 40 这样子。--记得pushdown(), 要把所有值算出来,才能确定大小。下同。void add(int x) {//从小到大插入x cnt++; Node *p = ss.root; int k = 0; while ( p != null ) { p->... 阅读全文

posted @ 2013-06-21 17:30 Ac_coral 阅读(171) 评论(0) 推荐(0) 编辑

2013年6月20日

UVa1308 LA2572

摘要: 目前为止,这个题处理精度的方法很值得学习。。按照从里往外的顺序找圆与其他圆的所有交点的极角,根据这些交点的极角求小圆弧的中点的极角,再根据极角求坐标。对于每个小圆弧中点,从外往里找,第一个满足 “点在圆外面” 的圆,一定是可见的。这个方法对于多边形的也适用,可以在桌子上面放几本大小不同的书,想一想 - -int topmost ( Point p ) { for ( int i = n-1; i >= 0; --i ) if ( Length(circle[i].c-p) < circle[i].r ) return i; return -1;}关于精度的处理,是这样的:对于每个圆 阅读全文

posted @ 2013-06-20 20:18 Ac_coral 阅读(281) 评论(0) 推荐(0) 编辑

20130620

摘要: 【圈子决定命运】1、雄鹰在鸡窝里长大,就会失去飞翔的本领,野狼在羊群里成长,也会爱上羊而丧失狼性。2、和聪明的人在一起,你才会更加睿智。和优秀的人在一起,你才会出类拔萃。所以,你是谁并不重要,重要的是,你和谁在一起。 阅读全文

posted @ 2013-06-20 19:39 Ac_coral 阅读(102) 评论(0) 推荐(0) 编辑

2013年6月19日

poj3580

摘要: 第一道伸展树题。。。无序序列,区间翻转,区间查询最小值,区间循环移位,在给定位置插入值,删除给定位置的值;区间翻转:这个跟白书代码一致。。void flip(int a, int b) { Node *left, *mid, *right, *o; split(ss.root, a, left, o); split(o, b-a+1, mid, right); mid->flip ^= 1; ss.root = merge(merge(left, mid), right);}区间查询最小值:维护了mi信息。。void query_min(int a, int b) { Node *... 阅读全文

posted @ 2013-06-19 21:37 Ac_coral 阅读(339) 评论(1) 推荐(0) 编辑

2013年6月18日

20130618

摘要: 有人帮你是幸运,学会心怀欢喜与感恩;无人帮你是命运,学会坦然面对与承担。没有人该为你做什么,因为生命本是自己的,你得为自己负责任。 阅读全文

posted @ 2013-06-18 19:40 Ac_coral 阅读(94) 评论(0) 推荐(0) 编辑

UVa12304

摘要: 这篇总结可能很长 - - 需要一点点的分析。首先,这题最大的收获:关于eps的宏定义,并不一定总是一个固定值,1e-10之类。。这个浮点常量也不一定是越小越好。。对于这个题来讲,const double eps = 1E-6; const double eps = 1E-5; const double eps = 1E-4; 甚至const double eps = 1E-1; 都可以AC。再小一点就不行了~接着,说一下这个:struct Line { Point p; Vector v; Line(Point p, Vector v):p(p),v(v) { } Poin... 阅读全文

posted @ 2013-06-18 17:08 Ac_coral 阅读(279) 评论(0) 推荐(0) 编辑

导航