![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 75
TC_jiang886
这个作者很懒,什么都没留下…
展开
-
线段树
NYIST 士兵杀敌(二) #include #include int a[1000005]; struct Tree { int left,right; int sum; }; struct Tree tree[2100000];//这种写法树的枝叶可能太多所以tree【】要申请的大一点 // 不能和a数组一样大 他的空间复杂度小于4*a数组应该开为a原创 2014-04-29 09:59:53 · 388 阅读 · 0 评论 -
rmq算法
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。 2.RMQ算法 对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量非常大转载 2014-11-23 13:00:28 · 400 阅读 · 0 评论 -
二分查找下界 下界
#include #include using namespace std; int a[10000]; int Serch(int x,int y,int v)//二分查找下界当找不到的时候返回的是第一个大于,因为当出现a[x]小于v的时候,a[y]大于v的时候,x=(y+x)/2,程序会执行else,所以返回的时候就是y的值; { int mid; while(x原创 2014-12-03 19:26:42 · 772 阅读 · 0 评论 -
poj 3518 Prime Gap 二分查找下界和素数筛法
/* 题意:输入有多组数据,每组数据一个n,如果n是素数,输出0否则输出离n最近的两个素数的积,第100000个素数是1299709,所有的素数都在这个范围内 思路:素数筛法加二分查找下界 */ #include int a[1299720],pri[100005]; int Serch(int v)//二分查找下界 { int mid,x=0,y=100001;原创 2014-12-04 16:08:16 · 798 阅读 · 0 评论 -
后缀数组之最长公共前缀
#include #define maxn 100 int main() { int rank[maxn],height[maxn],sa[maxn]= {0,3,1,4,2},s[maxn]= {1,2,3,2,3};//s串可以看成abcbc int i,j,k=0; for(i=0; i rank[sa[i]]=i; for(i原创 2015-01-15 20:53:31 · 1043 阅读 · 0 评论 -
后缀数组之倍增算法
#include #include #include using namespace std; #define MAXN 123123 char s[MAXN]; int sa[MAXN],t[MAXN],t2[MAXN],c[MAXN],n; void build(int m) { int i,*x=t,*y=t2; //其实下面的是计数排序 f原创 2014-12-31 09:10:46 · 850 阅读 · 1 评论 -
大白书伸展树学习笔记
void splay(Node * &o,int k) { int d=o->cmp(k);//cmp函数比较的是k和o->ch[0]->s+1的大小 if(d==1) k-=o->ch[0]->s+1; if(d!=-1) { Node *p=o->ch[d]; int d2=p->cmp(k); i原创 2015-01-20 09:27:24 · 962 阅读 · 0 评论 -
树链剖分 FZU 2082
#include #include #include using namespace std; const int maxn = 50005; int val[maxn]; struct node { int l,r; long long sum; } xds[maxn void build(int ID,int l,int r) { xds[ID原创 2015-03-09 11:01:18 · 633 阅读 · 0 评论 -
hdu 5222
/* 题意: 直接按照样例来说:有t组数据,没有数据有n,m1,m2,n代表有n个点,m1代表有m1条无向边,m2代表有 有m2条有向边,一条边只能走一次(也就是题上说的走过之后路会坍塌)如果有两个1 2 ,1 2 代表1和2之间 有两条边 首先对于所有的无向边,我们使用并查集将两边的点并起来 若一条边未合并之前,两端的点已经处于同一个集合了,那么说明必定存在可行的环(原创 2015-05-03 10:57:35 · 1200 阅读 · 0 评论