求一个区间的最大连续子序列,基本想法就是分治,这段子序列可能在区间的左半边,也可能在区间的右半边,也有可能是横跨区间中点,这样就是左子区间的最大后缀加上右子区间的最大前缀之和. 线段树维护三个信息:区间最大前缀.最大后缀.最大连续子区间的下标. 最大前缀可以通过递推来求:要么是左子区间的最大前缀和.要么是左子区间的和 加上 右子区间的最大前缀和 最大后缀和的递推类似. 递推之前要预处理整个序列的前缀和. #include <cstdio> #include <cstring> #i…
input n m 1<=n,m<=500000 a1 a2 ... an |ai|<=1e9 m行查询 每行一对a b output 对于每对a b输出区间[a,b]中最小连续和x y,如果有多组满足,输出x最小,如果还有多组满足,输出y最小 #include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib>…
"Ray, Pass me the dishes!" UVA - 1400 题意就是线段树区间子段最大和,线段树区间合并,但是这道题还要求输出最大和的子段的左右端点.要求字典序最小,要求左右端点尽量靠左. 比如: 3 3 3 -9 3 3 3 输出的是1 3,而不是1 7 3 3 3 -9 3 3 4 输出的是1 7,而不是5 7 大体意思就是这样. 有一个坑,我没读好题,输出Case是每一组样例输出一个,而不是每查询一次就输出一次Case... 其他没什么了.具体代码写了注释. 代码…
UVA 1400 - "Ray, Pass me the dishes!" option=com_onlinejudge&Itemid=8&page=show_problem&category=501&problem=4146&mosmsg=Submission+received+with+ID+13958986" target="_blank" style="">题目链接 题意:给定一个序…
                        "Ray, Pass me the dishes!" Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description   After doing Ray a great favor to collect sticks for Ray, Poor Neal bec…
题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair保存端点,用自带的<来得到最优. #include <bits/stdc++.h> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 typed…
又是一道线段树区间更新的题: #include<cstdio> #include<algorithm> #include<cstring> #define ll long long #define maxn 500005 using namespace std; ll sum[maxn]; struct tree { int l,r; int ml,mr; int pre,suf; tree *left,*right; } tr[maxn*]; int trcount;…
题目链接:https://cn.vjudge.net/problem/UVALive-3938 参考刘汝佳书上说的: 题意: 给出一个长度为n的序列, 再给出m个询问, 每个询问是在序列 $[a,b]$ 之间的最大连续和. 要你计算出这个这个区间内最大连续和的区间 $[x,y](a \le x \le y \le b)$: 思路: 1.构造线段树,其中每个结点维护3个值,最大连续子列和 $max\_sub$,最大前缀和 $max\_prefix$,最大后缀和 $max\_suffix$. 具体来…
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2520 题意:有一个排列1~k,求第n个排列,其中n为 ,K(1≤K≤50000),S1, S2 ,…, Sk.(0≤Si≤K-i). 分析:这道题目乍看之下没有什么好的思路,k!太大了,但是仔细看一看就会发现n和康托展开式很类似 如果不知道康托展开的话请看:http://www.d…
题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的线段树总是在自身的叶子处不能直接更新数据,而是要以一维下他的左右孩子对应的位置数据进行更新. #include <bits/stdc++.h> using namespace std; #define N 505 #define ls o<<1 #define rs o<<…