摘要:
problem 1001(hdu 4632) 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4632 Palindrome subsequence 思路:记忆化DP, dp[i][j]表示原字符串中[i,j]位置中出现的回文子序列的个数 递推关系: dp[ 阅读全文
摘要:
Problem 1010 (hdu 4630) No Pain No Game 思路:数组data[],从后往前遍历,遍历到data[i]的时候,枚举data[i]的约数,假设约数j; pre[j]数组记录的是约数j最近出现的下标,那么,在询问的区间左端点等于i时,约数j影响的区间是pre[j]~最 阅读全文
摘要:
题目:http://poj.org/problem?id=2892思路:用treel,treer记录与区间左右端点相连的空白区间大小,然后更新。。。。代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=50010; 6 int treel[maxn*4];//从左边延伸的长度 7 int treer[maxn*4];//从右边延伸的长度 8 int st[maxn]; 9 void build(int l,int r,int w) 10 { 11 treel[w]=... 阅读全文
摘要:
题目:http://poj.org/problem?id=2352大意:一些星星有自己的优先级,优先级是x坐标和y坐标小于等于该星星坐标的星星个数思路:由于这个题的y值是从小到大排列,所以对x建立线段树,找小于等于该星星x坐标的星星个数即可代码:#include #include#includeusing namespace std;const int maxn=32010;const int man=15010;int res[man];int tree[maxn*4];int lz[maxn*4];int num;int find(int l,int r,int w,int L,int R 阅读全文
摘要:
题目:http://poj.org/problem?id=2482大意:在一个坐标系中给你n(10^4)个点(点的坐标范围为0 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn=10010; 7 struct node 8 { 9 __int64 id;//坐标值 10 int flag;//标记左边还是右边 11 int xh;//序号 12 }sx[maxn*2],sy[maxn*2]; 13 struct bj 14 { 15 int y1,y2... 阅读全文
摘要:
感觉写的很给力,,,收藏一下。。。教你透彻了解红黑树作者July2010年12月29日------------------本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。本人声明:个人原创,转载请注明出处。更多请参考:http://blog.csdn.net/v_JULY_v/archive/2010/12/29/6105630.aspx详情,参见MyBLog:http://blog.csdn.net/v_JULY_v一、红黑树的介绍先来看下算法导论对R-BTree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对 阅读全文
摘要:
转自:http://hi.baidu.com/dongaxis/item/ff10fdb41d26b79f19469784平衡树二叉树左子树都小于根节点,右子树都大于根节点。可以动态维护这棵树(因为是树结构,可以有限步完成插入),所以是动态查找算法。时间复杂度为O(logn)在46.5%的情况下,需要把二叉树平衡化成“平衡二叉树”。平衡二叉树平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。定义:平衡二叉树或为空树,或为如下性质的二叉排序树:(1)左右子树深度之差 阅读全文
摘要:
题目:http://poj.org/problem?id=2886题意:有一群小朋友围成一个环,编号1,2,3…N。每个人手上握着一个非0的数字,首先第K个人出列,然后看他手上的数字,假设为m,则从下一个开始第m个人出列,一直如此。第i个出列的人会得到 i的约数个数 个糖果,求得到最多糖果的人的名字和糖果数。思路:先预处理每个数的约数个数,然后找出得到最多的糖果的是第几个出队的人,假设为res; 建立一个线段树,表示这一段还有几个人, 在更新时计算出出队的这个人的前面和后面的人的个数(L和R),用他手上的数字计算出是剩下人中的第几个人,然后进入线段树搜索出这个人的原始序号。。重复这... 阅读全文
摘要:
题目:http://poj.org/problem?id=2750题意:n个节点的环,在这个环中找到最大的连续字段和,,。。。思路:建立一个线段树,每个节点有7个值, sum这一段的总和; lmin,lmax从左向右和最小、最大; rmin,rmax从右向左和最小、最大; amin,amax这一段的和最小、最大; 节点的更新为:push函数 1 void push(int w)//节点的更新 2 { 3 tree[w].sum=tree[L].sum+tree[R].sum; 4 tree[w... 阅读全文
摘要:
题目:http://poj.org/problem?id=2777大意:有个L长得木板, T种颜色,O个操作,分两种操作,一种是给从a到b区间染颜色c,另一种是询问区间a到b有多少种不同的颜色。思路:线段树区间更新的题目,基本是模板题; 注意:由于颜色的种类很少,所以可以用位操作来表示颜色;一个整数可以表示一段的颜色状态。代码: 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 co 阅读全文