摘要: 假设每个格子代表一个数A[i][j],i是横坐标,j是纵坐标,左上角的坐标为(1,1)我们要求红色区域元素之和,设sum(i,j)表示以i,j坐标为右下角坐标,以0,0为左上角坐标矩形内的元素之和,sum(c,d):绿色+黄色+红色+蓝色sum(c,b-1):绿色+蓝色sum(a-1,d):绿色+黄色sum(a-1,b-1):绿色则红色区域元素之和=sum(c,d)-sum(c,b-1)-sum(a-1,d)+sum(a-1,b-1)#include<iostream>#include<cstring>using namespace std;#define N 1005 阅读全文
posted @ 2013-05-21 21:35 小仪在努力~ 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 首先,我们可以把树状数组的横坐标x看作c[i]数组的下标i,由于y是递增的,所以如果有两个数的横坐标相同,则...#include<iostream>#include<string.h>#define MARK 32005int c[MARK],lev[MARK];int sum(int x) //计算最大下标为x的前缀和{ int ret=0; while(x>0) { ret+=c[x];x-=(x&-x); } return ret;}void add(int x) //下标x的数增加d,对应的c数组也会有变化{ while(x<MARK... 阅读全文
posted @ 2013-05-21 18:00 小仪在努力~ 阅读(102) 评论(0) 推荐(0) 编辑