摘要:
T_T感动啊~上下折腾了不下3次,终于裸打成功#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=5555;int sum[maxn<< 阅读全文
摘要:
ORZ NOTONLYSUCCESShttp://www.notonlysuccess.com/index.php/segment-tree-complete/哈哈,再打了很多次线段树模板后,终于裸打成功。虽然有抄袭的嫌疑,但是纪念一下,第一棵线段树#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace s 阅读全文
摘要:
如题~ 阅读全文
摘要:
摘抄自http://www.notonlysuccess.com/index.php/segment-tree-complete/maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于maxn的最小2x的两倍lson和rson分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定于比较方便的表示以前的写法是另外开两个个数组记录每个结点所表示的区间,其实这个区间不必保存,一边算一边传下去就行,只需要写函数的时候多两个参数,结合lson和rson的预定义可以很方便PushUP(int rt)是把当前结点的信息更新到父结点PushDown(int rt) 阅读全文
摘要:
T^T做这题就是各种泪~卡了将近2小时,各种Judging error、越界与WA。题解:整个数组是非降序的,所有相等元素都会聚集在一起。开一个num数组,用num[i]来记录第i段相等的元素有多少个(也就是说相当于RMQ中的元素值了),num数组的长度就是原数列不同元素的个数(段数),l数组记录i段元素的上界,r数组记录i段元素的下界,用一个mark数组记录i位置的元素属于第几段。假设询问区间为a,b:L=mark[a],R=mark[b];ans=max(r[L]-a+1,b-l[R]+1,夹在这两个段中最大值)图解:#include<iostream>#include< 阅读全文
摘要:
T^T太坑了吧,这题,前向星式建图,建到我发疯。卡了一共2小时。。。#include<iostream>using namespace std;const int MAX = 100005;struct apple{ int v,nxt;}edge[MAX];int n,m,low[MAX],high[MAX],head[MAX],k,dep,c[MAX];bool pick[MAX];void dfs(int u)//完美的映射方式{ low[u]=++dep; //下界 for(int i=head[u];i;i=edge[i].nxt) //不管子树的编号如何变,子树的... 阅读全文
摘要:
浩哥哥和DELL大牛都说让我赶紧从ACM撤退,我也知道,那是条不归路,特别是对于现在就大三的我来说。我苦思冥想了几个小时,各种纠结。最后决定不顾一切的爱才算是爱~ 阅读全文
摘要:
很裸的RMQ~#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define MAXN 50005int maxsum[MAXN][20],minsum[MAXN][20],n,q;void RMQ(){ for(int j=1;(1<<j)<=n;++j) for(int 阅读全文
摘要:
RMQ问题:用典型的ST算法可过。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define MAXN 100010 int maxsum[MAXN][18],minsum[MAXN][18],n;void RMQ(){ for(int j=1;(1<<j)<=n;++ 阅读全文
摘要:
RMQ:范围最小值问题。给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}。每次用一个循环来求最小值显然不够快快,前缀和的思想也不能提高效率,这时候ST算法就派上用场了,它预处理的时间是O(nlogn),但是查询只需要Q(1),而且常数很小。令dp[i][j]表示从i开始的,长度为2^j的一段元素中的最小值,递推公式:dp[i][j]=min{dp[i][j-1],dp[i+2^(j-1)][j-1]}模板:(^ ^一次预处理,一辈子不用担忧)void RMQ_init(const vector<i 阅读全文