题意:有一个环,有1~N编号,m次操作,将a位置的值改为b,问你这个环当前最小连续和多少(不能全取也不能不取) 思路:用线段树维护一个区间最值连续和.我们设出两个变量Lmin,Rmin,Mmin表示区间左边最小连续和,右边最小连续和,区间最小连续和,显然这可以通过这个方式更新维护. 现在我们已经可以维护一个区间最值连续和了,那么怎么求“环”的最小连续和呢?显然如果最小区间横跨1和n是不能表示出来的(比如最小区间是2,1,n,n-1之和),那么我们可以转化为求sum-Mmax即区间和减去区间最大值…
SPOJ - GSS1:https://vjudge.net/problem/SPOJ-GSS1 参考:http://www.cnblogs.com/shanyr/p/5710152.html?utm_source=itdadao&utm_medium=referral 题意: 给定一个数列,很多次询问,问某个区间中最大的连续和是多少. 思路 线段树,每个线段树的节点要维护对应区间的最大值ans,与左端点相连的最大值lv,与右端点相连的最大值rv,还有区间全部的总和V: 这个V用在pushup中…
You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defined as follows: Query(x,y) = Max { a[i]+a[i+1]+...+a[j] ; x ≤ i ≤ j ≤ y }. Given M queries, your program must output the results of these queries. Inp…
POJ.2763 Housewife Wind ( 边权树链剖分 线段树维护区间和 ) 题意分析 给出n个点,m个询问,和当前位置pos. 先给出n-1条边,u->v以及边权w. 然后有m个询问,询问分2种: 一是讲第i条边的边权修改为w. 二是询问从当前位置走到点x经过的边权和(下次询问就是从这点开始). 边权的树链剖分,其实和点权的差不多.对于一条边u-v,及其边权w,在建立线段树的时候,将深度大的点,当做其边权w,如dep[u]>dep[v],就令newid[u] = w.这样一来,将边…
recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 <= j <= y2 , x1 <= x2 , y1 <= y2 }.这么简单的题,recursion当然会做啦,但是为了维持她的傲娇属性,她决定考考你. Input 输入的第一行为数据组数.对于每组数据,第一行包含一个正整数n和长度为n的序列a[n].接下来一行有一个正整数m.下面m行分…
线段树维护区间前k小 $ solution: $ 觉得超级钢琴太麻烦?在这里线段树提供一条龙服务 . 咳咳,开始讲正题!这道题我们有一个和超级钢琴复杂度一样 $ ~O(~\sum x\times logn)~ $ 的做法.因为线段数支持动态维护最小值,而取 $ max $ 操作我们可以用线段树的 $ lazytag $ 实现(不懂可以看看代码里的标记下传和区间修改).所以我们主要目的就是输出区间前 $ x $ 小,这个其实我们可以用线段树的单点修改完成! 我们在区间 $ [l,r] $ 里面找最…
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线性基. 用线段树去维护区间合并 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5; struct node { ],lazy,st; void init() { memset(bas,,sizeof(bas));…
BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目中反复要求对链上信息进行修改和查询.如果依旧采取用dfs序的方法,会发现不适用,原因是dfs序适用于处理子树的问题.当然暴力肯定是要被卡掉的. 树链剖分分为两次dfs. 第一次dfs求出每个节点的father,son,size,deep,这里涉及到重儿子的概念,网上有很多资料就不在这里赘述了.换句话…
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 输入输出格式 输入格式: 输入一共有两行,第一行为n,k. 第二行为n个数(<INT_MAX). 输出格式: 输出共两行,第一行为每次窗口滑动的最小值 第二行为每次窗口滑动的最大值 说明 50%的数据,n<=10^5 100%的数…
题目链接:hdu_5726_GCD 题意: 给你n个数(n<=1e5)然后m个询问(m<=1e5),每个询问一个区间,问你这个区间的GCD是多少,并且输出从1到n有多少个区间的GCD和这个区间的相同 题解: 对于第一个问,直接上线段树维护一下区间GCD就行了,对于第二个问,直接上区间GCD维护的板子. #include<cstdio> #include<algorithm> #include<map> #define ls l,m,rt<<1 #…