2011年5月14日

poj 2255

摘要: 题意:给出一棵二叉树的前序遍历和中序遍历,输出这棵树的后序遍历。代码:#include<iostream>#include<fstream>using namespace std;int n;char c1[30],c2[30];struct e{ char c; e *left,*right;};e * solve(int p,int q,int s){ int i; e *f=new e; for(i=q;i<=s;i++) if(c2[i]==c1[p]) break; f->c=c1[p]; if(i==q) f->left=NULL; els 阅读全文

posted @ 2011-05-14 17:33 宇宙吾心 阅读(559) 评论(0) 推荐(0)

poj 2155

摘要: 题意:一个n*n的01矩阵,和几种动态操作,包括对子矩阵(x,y,xx,yy)的所有元素异或,查询某一点(x,y)的元素值。参见国家队 09年 武森《浅谈信息学竞赛中的“0”和“1”》代码:#include<iostream>#include<fstream>using namespace std;int b[1005][1005];int lowbit(int x){ return x&(-x);}int n;void add(int x,int y){ int i=y; while(x<=n) { y=i; while(y<=n) { b[x][ 阅读全文

posted @ 2011-05-14 16:53 宇宙吾心 阅读(726) 评论(0) 推荐(0)

poj 1195

摘要: 题意:一个n*n的矩阵,和几种动态操作,包括对某一点(x,y)值修改,查询子矩阵(x,y,xx,yy)的元素和。思路:二维树状数组,典型的动态操作题目。查询子矩阵(x,y,xx,yy)的元素和,注意一下就可以了: sum(xx, yy)-sum(x-1, yy)-sum(xx,y-1)+sum(x-1,y-1);代码:#include<iostream>#include<fstream>using namespace std;int b[1025][1025];int lowbit(int x){ return x&(-x);}int n;void add(in 阅读全文

posted @ 2011-05-14 16:21 宇宙吾心 阅读(382) 评论(0) 推荐(0)

poj 3321

摘要: 题意:一棵具有n个节点的树,一开始,每个节点上都有一个苹果。现在给出m组动态的操作:(C,i)是摘掉第i个节点上面的苹果(若苹果不存在,则为加上一个苹果),(Q,i)是查询以第i个节点为根的子树有几个苹果(包括第i个节点)。思路:树状数组。这道题重点怎么建立树到树状数组的映射关系:利用dfs遍历树,对每个节点进行两次编号,第一次搜到第i个节点时的深度dep,为这个节点管辖区间的上限low[i](也为这个节点的下标),然后搜这个节点的子节点,最后搜回来后的深度dep,为这个节点管辖区间的下限high[i],如下图所示。接下来就是树状数组部分了。代码:#include<iostream> 阅读全文

posted @ 2011-05-14 16:01 宇宙吾心 阅读(1014) 评论(0) 推荐(0)

导航