学习二维树状数组,线段树:poj 2155 Matrix 题意: 给定一个n*n的0-1矩阵,执行一些如下的两种操作:C a,b,c,d :将矩阵中(a,b)到(c,d)的格子中的0-1进行“非”操作Q a b :询问当前(a,b)位置的元素的值二维树状数组转化成:单点更新,成段求和。一种思路是用一个二维数组tree[][]来标记数组中值的变换次数,通过变 换的次数就可以得出当前数组元素的值了。我们可以先分析一下一维时候的情况,假设一个一维的数组array[] ,现在要求给区间[a,b]内的每个元素增加一个值add,我们可以这样利用树状数组,将a元素增加add值,将(b+1)元素增加一个-ad Read More
posted @ 2012-10-24 13:23 feng_linxu Views(166) Comments(0) Diggs(0)
hdu 4090 GemAnd Princs这题很长,但是就是一个暴搜+减枝减枝: 现在的最大值 在上剩下的各颜色的平方(假设其它相同颜色都是连在一起的),不加会 tle;还要说的是,当相同颜色的块<=2时,是不需要接着dfs 的View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 6 int n,m,k,best; 7 int a[9][9],ge[7]; 8 9 void getbian() //get... Read More
posted @ 2012-10-23 19:39 feng_linxu Views(168) Comments(0) Diggs(0)
2^k:int lowbit(int t){ return t&(-t);}简单的数据结构,占用的时间少,是在O(logn)时间里插入,求和。(1)hdu 1541 Stars基本的题,因为加入点的顺序,每次就是求区间(0,x)的和。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define size 32005 5 const int max=32005; 6 int num[size]; 7 int level[size]; 8 int low Read More
posted @ 2012-10-07 16:18 feng_linxu Views(115) Comments(0) Diggs(0)
(1)hdu 1075 What Are You Talking About 【stl or 字典树】 动态建立字典树View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 5 typedef struct node 6 { 7 node *child[26]; 8 char str[12]; 9 char flag; 10 }node, *Node; 11 12 Node root; 13 14 void build_trie(Node *root) ... Read More
posted @ 2012-10-07 13:25 feng_linxu Views(165) Comments(0) Diggs(0)
先排序求出排序后的数列划分树,就是从下向上的递归,每次都把小于或等于(等于的个数是n/2-小于中间数的个数)中间数的数放前。lg( n ) 的算法。(1)poj 2104 K-th Number最基本的划分树题目,求给定区间内的最大的值。View Code // 划分树#include<cstdio>#include<iostream>#include<algorithm>#define size 100005using namespace std;#define inta long longint s[size]; //排序的后的数int val[25][ Read More
posted @ 2012-09-27 16:10 feng_linxu Views(182) Comments(0) Diggs(0)
(1)hdu 1394 Minimum Inversion Number 这题有人用线段树排序,方正算法要 n(log n) ,我就直接用堆排序来进行找逆序对的个数,因为数的大小在0~ n-1 之间,就能简单的根据它的值判断比它大的数的个数是n-a[i]-1,比它小的个数是a[i]。View Code #include<stdio.h>#include<string.h>#define size 5005#define INF 100000000int a[size],b[size];int n,sum;void merge(int p,int q,int r){ in Read More
posted @ 2012-09-20 17:11 feng_linxu Views(142) Comments(0) Diggs(0)
虽然线段树我没有学多久,但是我的格式被好几个人鄙弃,从今天开始,我要更改线段树的格式。 pushup( rt ) 向下更新lazy 等节点信息。 pushdown( rt ) 向上更新(1) hdu 3954 Level up 活用 lazy 标志,新的格式:View Code #include<stdio.h>#include<string.h>#include<math.h>int max(int a,int b){ return a>b?a:b;}int min(int a,int b){ return a<b?a:b;}const int Read More
posted @ 2012-09-20 15:02 feng_linxu Views(150) Comments(0) Diggs(0)
对节点进行操作(1)hdu 1166 敌兵布阵这是简单的练手题View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#define size 50010int sum[size<<2];void PushUp(int rt){ int ls,rs; ls=rt<<1;rs=rt<<1|1; sum[rt]=sum[ls]+sum[rs];}void build_tree(int l,int r,int rt){ int m=(l+r)>&g Read More
posted @ 2012-09-19 20:45 feng_linxu Views(127) Comments(0) Diggs(0)