/* poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题! 可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目 所以我们利用start[i]数组来记录 i 节点在一维数组的起始位置, 而end[i]则...
分类:
移动开发 时间:
2014-07-07 23:08:32
阅读次数:
400
1990题意:每头牛有两个属性v,x,计算sigma(max(v[i],v[j])*abs(x[i]-x[j]))1=x[j] +sigma(v[j]*(x[j]-x[i])) x[i]=x[j]其中dist.sum(maxn)-dist.sum(x[i]) 就是坐标在[x[i],maxn]...
分类:
其他好文 时间:
2014-07-07 14:26:47
阅读次数:
292
题意:无限大的棋盘上,在横向和纵向上被包围的白子会变成黑子,求最终黑子个数?分析:首先这个棋盘十分的大,但已给黑点的个数为1e5,我们需要离散化,所谓的离散化就是数组下标的重新定义。这里给出离散化函数,返回的是离散化后数组的个数 1 int compress(int *p,int N) 2 { 3 ...
分类:
其他好文 时间:
2014-07-07 13:30:16
阅读次数:
309
树状数组是一种优雅的数据结构,利用的是前缀和的思想,相当于是线段树的一部分,常常用来快速解决区间求和问题,比相应的线段树要快,因为常数小。单点更新+区间求和这个是树状数组最最基础的应用了给个例题 hdu 1166 1 #include 2 #include 3 #include 4 #incl...
分类:
其他好文 时间:
2014-06-30 14:33:57
阅读次数:
210
题目链接:http://poj.org/problem?id=3468
题目大意:给出一组数组v[i],有两种操作,一种给出两个数a,b,要求输出v[a]到v[b]之间的和,另一种给出三个数a,b,c,让v[a]到v[b]之间的数全都加上c。
完全是树状数组能够实现的功能,但是如果就这样单纯的套用模板,做第二种操作是更新每个值,这样的操作就有可能超时。
换一种思路,既然第二种操作是给某区间上...
分类:
其他好文 时间:
2014-06-29 20:47:30
阅读次数:
216
题目大意:
三个操作
D pos 将pos位置摧毁,让它和周围不相连。
Q pos 问和pos 相连的有多少个村庄。
R 修复最近摧毁的村庄。
思路分析:
树状数组记录这个区间有多少个1。
如果 [s-e] 有e-s+1个1 的话。那么这个区间是相连的。
这样的话,我们就可以用二分的办法求出与某个位置最大相连的数量。
还有这里二分
while(l
{
i...
分类:
其他好文 时间:
2014-06-27 09:54:14
阅读次数:
183
题目链接:点击打开链接
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 500005
#define ll int
ll n;
ll c[N], maxn;
inline ll...
分类:
其他好文 时间:
2014-06-27 09:06:04
阅读次数:
183
有工具在手,这题就是一个模板题,就是有点不清楚,最后问的是单个元素的值,它怎么sum求出来的
#include
#include
#include
#include
using namespace std;
#define maxn 1005
int c[maxn][maxn];
int Row, Col;
inline int Lowbit(const int &x)
{
...
分类:
其他好文 时间:
2014-06-27 07:38:00
阅读次数:
281