2013年5月2日

树状数组总结

摘要: 最近做了近20道树状数组题目,发现有点痴迷于它了,这个数据结构真是太优美了,小巧又强悍,编程复杂度极其低,大爱呀!先丢上模板lowbit操作:int lowbit(int x){ return x&-x;}add操作:void add(int x,int d){ while(x0) { ret+=c[x]; x-=lowbit(x); } return ret;}运用树状数组我们可以解决一下几类问题:一、单点修改,区间查询这是树状数组最基本的操作一维:POJ3928 - Ping pongPOJ - Ultra-QuickSort(求逆... 阅读全文

posted @ 2013-05-02 18:23 仗剑奔走天涯 阅读(494) 评论(0) 推荐(0) 编辑

UVa11610 - Reverse Prime

摘要: 题目大意 定义了一种叫做Reverse Prime的数:位数为7位,倒转之后是六位的素数 要求按顺序找出所有的Reverse Prime,并计算出每个Reverse Prime的因子数 可以对这些数进行一下两种操作: 1、“q i”查询区间[0,i]Reverse Prime的因子数之和 2、“d reverse_prime”把reverse_prime这个Reverse Prime从序列中删除 ... 阅读全文

posted @ 2013-05-02 13:49 仗剑奔走天涯 阅读(218) 评论(0) 推荐(0) 编辑

SPOJ227 - Ordering the Soldiers

摘要: 题目大意给定一个序列a[1],a[2],a[3]…..a[n],a[i]表示位置i之前有a[i]个数比位置i上的数字大,要求你求出每一个位置上的具体数字题解直接上网上的题解吧。。。这题与正常的树状数组题目正好想反,给定数组b[i]表示i前面比a[i]大的点的个数,求a[]数组。我们可以先想想朴素的做法,比如b[] = {0, 1, 2, 0, 1},我们用数组c[i]表示还存在的小于等于i的个数,一开始c[] = {1, 2, 3, 4, 5},下标从1开始。 我们从右向左扫描b[]数组,b[5] = 1,说明该点的数是剩下的数中第4大的,也就是小于等于它的有4个,即我们要找最小的j符合c[j 阅读全文

posted @ 2013-05-02 13:23 仗剑奔走天涯 阅读(151) 评论(0) 推荐(0) 编辑

导航