算法--数据结构
老顽童灬
我是渣渣
展开
-
树状数组--转
传送门第01讲 什么是树状数组?树状数组用来求区间元素和,求一次区间元素和的时间效率为O(logn)。有些同学会觉得很奇怪。用一个数组S[i]保存序列A[]的前i个元素和,那么求区间i,j的元素和不就为S[j]-S[i-1],那么时间效率为O(1),岂不是更快?但是,如果题目的A[]会改变呢?例如:我们来定义下列问题:我们有n个盒子。可能的操作为1.向盒子k添加石块2.查询从盒子i到盒子j总的石块数转载 2017-08-16 15:16:19 · 190 阅读 · 0 评论 -
树状数组--一维模板
树状数组不是很懂只能给个模板了。 原理是二分法。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int tree[100005];int n;int lowbit(int x){ return x&(-x);}void add(int x,int y){ while(原创 2017-08-16 15:56:48 · 221 阅读 · 0 评论 -
线段树--数据结构(建树,查询区间和&&最大值&&最小值)
代码模板:#include<cstdio>#include<algorithm>using namespace std;struct Node{ int l,r,sum,Max,Min;}Tree[1000<<2];void PushUp(int o){ Tree[o].sum = Tree[o*2].sum + Tree[o*2+1].sum; Tree[o]原创 2017-08-12 10:29:43 · 668 阅读 · 0 评论 -
KMP算法
#include<cstdio>#include<cstring>int next[100];char a[100];char b[100];void getnext(char *t,int n)//next数组表示前缀子串和后缀子串的最大重和的长度 { //例如:a b a b a int j=0,i=0;原创 2017-08-15 15:28:31 · 180 阅读 · 0 评论 -
字典树
#include<cstdio>#include<cstring>#include<algorithm>#define idx(x) (x-'a')using namespace std;int n,m; //输入字符串数 查询次数 int ant; //记录当前在哪一层 struct Node{ int v; //当前有多少个字符串共用这个数组原创 2017-08-22 20:41:11 · 210 阅读 · 0 评论 -
pat1008
数组元素循环右移问题 (20)时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置原创 2017-09-17 18:49:59 · 232 阅读 · 0 评论 -
畅通工程--并查集(水)
Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应原创 2017-10-24 17:21:54 · 225 阅读 · 0 评论 -
表达式求值(单位运算)--栈
#include<cstdio>#include<iostream>#include<cstring>using namespace std;typedef int Status;typedef struct StackNode{ char date; struct StackNode *next;}StackNode,*LinkStack;Status Initst原创 2017-11-06 17:30:03 · 318 阅读 · 1 评论