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 阅读(162) 评论(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 阅读(173) 评论(0) 推荐(0)

导航