题目链接:http://poj.org/problem?id=2155
题目大意:给出一个N*N的0矩阵,下面给出两种指令:1. 给出的第一个数据为‘C’,再给出四个整形数据,x1,y1,y1,y2,对以(x1,y1)(x2,y2)分别为左上角和右下角坐标的矩阵内的元素进行反转(0变1,1变0) 2. 给出的第一个数据为‘Q’,再给出两个数据,x,y,然后输出此时这个坐标上的元素...
分类:
其他好文 时间:
2014-06-24 22:29:35
阅读次数:
271
题目链接:http://poj.org/problem?id=1195
纯纯的二维树状数组,不解释,只需要注意一点,由于题目中的数组从0开始计算,所以维护的时候需要加1。因为树状数组的下标是不能为1的
代码:
#include
#include
#define N 1030
using namespace std;
int c[N][N];
int cas,n,x,y,a,l,b,r,t...
分类:
其他好文 时间:
2014-06-24 21:15:14
阅读次数:
154
题目链接:http://acdream.info/problem?pid=1019
题意:两种操作,第一种将字符串某个位置的字符换为另一个字符;第二种查询某个连续子序列是否是回文串;
解法:有两种hash的办法,所以写了两种解法;首先hash是x1 * p^1+ x2*p^2 +x3*p^3...可以用树状数组维护前缀和,维护两个串,一个是正串,另一个是反串用于比较。比较时候乘以相应的p倍数判...
分类:
其他好文 时间:
2014-06-24 19:25:19
阅读次数:
252
题目链接:http://codeforces.com/problemset/problem/216/D
题意:
对于一个梯形区域,如果梯形左边的点数!=梯形右边的点数,那么这个梯形为红色,否则为绿色,
问:
给定的蜘蛛网中有多少个红色。
2个树状数组维护2个线段。然后暴力模拟一下,因为点数很多但需要用到的线段树只有3条,所以类似滚动数组的思想优化内存。
#include
#includ...
分类:
Web程序 时间:
2014-06-22 07:11:35
阅读次数:
205
一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此。但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行。
但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问。此时就需要根据线段树与树状数组的优缺点来选择了。
做一下基本操作的对比,如下图。
因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不...
分类:
其他好文 时间:
2014-06-18 06:11:05
阅读次数:
326
具体解释见小结。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL u...
分类:
其他好文 时间:
2014-06-17 16:26:54
阅读次数:
288
wa了十次,原来变量名写错。二维树状数组。 1 #include 2 #include 3 4
#define MAXN 1002 5 6 int nums[MAXN][MAXN]; 7 8 void swap(int *x, int *y) { 9
int tmp;10 ...
分类:
其他好文 时间:
2014-06-16 08:34:51
阅读次数:
216
一、树状数组树状数组是一个优美小巧的数据结构,在很多时候可以代替线段树。一句话概括就是,凡是树状数组可以解决的问题,线段树都可以解决,反过来线段树可以解决的问题,树状数组不一定能解决。树状数组英文名称为Binary
Index Tree,直译过来就是二进制索引树,我觉得二进制索引树更能说明其本质。树...
分类:
其他好文 时间:
2014-06-16 07:24:03
阅读次数:
190
1.易知,树上两点的距离dis[u][v] = D[u]+D[v]-2*D[lca(u,v)] (D为节点到根节点的距离)2.某条边权值一旦改变,将会影响所有以v为根的子树上的节点到根节点的距离,很明显,DFS一遍后以v为根的子树在DFS序列中是连续的一段,及转化为区间更新问题,可以用树状数组。做法...
分类:
其他好文 时间:
2014-06-15 11:42:02
阅读次数:
213
本题的树状数组稍微有点特点,就是需要所谓的离散化一下,开始听这个名称好像很神秘的,不过其实很简单。
就是把一个数组arr的值,其中的值是不连续的,变成一组连续的值,因为这样他们的顺序是不变的,所以,不影响结果。
例如:9 1 0 5 4 ->变为:5 2 1 4 3看出他们的相对位置不变的。
9和5为最大值在第一个位置,1和2为第二大的值在第二个位置,0和1在第一个位置等,看出对应顺序了吗?...
分类:
其他好文 时间:
2014-06-10 16:01:28
阅读次数:
257