摘要: pku 3264http://poj.org/problem?id=3264题意:给定n个奶牛的高度,求区间[s,e]中最高与最低高度的差值。rmq模板题目:求出最高最低然后求差。注意这里f[i][j]表示从j开始的2^i次方个数的最值。View Code #include <cstdio>#include <cstring>#include <iostream>#include <cmath>#define maxn 50007#define N 22using namespace std;int fMin[N][maxn],fMax[N][m 阅读全文
posted @ 2012-07-30 17:33 E_star 阅读(468) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/summerschool/1_interval_tree.pdfhttp://www.baidu.com/s?wd=%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=6570 阅读全文
posted @ 2012-07-30 15:08 E_star 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 首先要分清a[] c[] sum[] 他们各自所代表的意思;a[]就是输入的数组;c[]就是建立的树状数组;c[i] = a[i - 2^k +1] + ...... + a[i];a有多少个c就有多少个,而且c[i]肯定包含相应的a[i];lowbit(i) = 2^k 表示i的二进制数表示形式留下左右边的1其余为取0得到的数sum[k] = c[N1] + c[N2] + c[N3].......+ c[Nm];Ni-1 = Ni - lowbit(i);求和的话,就是有c[Nm] c[Nm-1] c[Nm-2] .... c[N1]的过程 Ni - lowbit(i)的过程是将Ni的二进 阅读全文
posted @ 2012-07-30 15:07 E_star 阅读(234) 评论(0) 推荐(0) 编辑
摘要: pku 3321Apple Treehttp://poj.org/problem?id=3321题意:苹果树上有n个分叉,每个插上长着一个苹果,给出每个叉的关系,然后给出两种操作1:C x改变分叉x的苹果(如果有就拿走,如果没有就长出一个) Q x询问包括树叉x在内以及其子树的苹果数量;思路:才开始就在如何将树结构转化成线性数组结构然后用树状数组求解上难住了,最后看了一下解题报告,原来是首先边表(或邻接表)存树,然后dfs对每个节点重新编号每个节点对应着s,e两个编号。s是首先进入该点时的编号也即它本身的新标号(对应了线性数组的编号),e是搜索完子树后返回根节点的编号也即根节点本身所包含的子树 阅读全文
posted @ 2012-07-30 14:46 E_star 阅读(341) 评论(0) 推荐(0) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4777本来想的算法是如果V<=100000就直接进行01背包时间复杂度为O(30*100000),如果大于100000大于部分贪心选择,剩余部分在进行01背包,可是中间会出现很多问题,大于部分的的处理不好弄,如果100000加上处理后的剩余部分会出现数组越界,再说有的数据也不会过,这只是一种yy的方法,不对。后来据说是爆搜解决01背包想了想时间复杂度能够达到(10^9自己不敢写,竟没有想到剪枝弄好了能够过,于是就写了起来,这里首先从大到小排序,这样大的在前边保证先装大的 阅读全文
posted @ 2012-07-30 10:50 E_star 阅读(246) 评论(0) 推荐(0) 编辑