题目大意:求区间$[L,R]$中所有子区间产生的最大公因数的个数. ------------------------- 对于$gcd$,我们知道$gcd(a,b,c)=gcd(gcd(a,b),c)$.所以我们可以利用$gcd$的传递性来求区间的$gcd$.如果$gcd$相同,那么保留下来位置相对靠右的那一个,这与我们查询的方式有关.我们在查询时是$O(n)$正向遍历的,询问的区间按照右端点进行关键字排序,每次维护一个新的$gcd$最靠右的位置并让这个位置+1,让之前的位置-1即可. 因为每次$…
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行分…
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线性基. 用线段树去维护区间合并 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5; struct node { ],lazy,st; void init() { memset(bas,,sizeof(bas));…
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.这样一来,将边…
线段树维护区间前k小 $ solution: $ 觉得超级钢琴太麻烦?在这里线段树提供一条龙服务 . 咳咳,开始讲正题!这道题我们有一个和超级钢琴复杂度一样 $ ~O(~\sum x\times logn)~ $ 的做法.因为线段数支持动态维护最小值,而取 $ max $ 操作我们可以用线段树的 $ lazytag $ 实现(不懂可以看看代码里的标记下传和区间修改).所以我们主要目的就是输出区间前 $ x $ 小,这个其实我们可以用线段树的单点修改完成! 我们在区间 $ [l,r] $ 里面找最…
题意:有一个环,有1~N编号,m次操作,将a位置的值改为b,问你这个环当前最小连续和多少(不能全取也不能不取) 思路:用线段树维护一个区间最值连续和.我们设出两个变量Lmin,Rmin,Mmin表示区间左边最小连续和,右边最小连续和,区间最小连续和,显然这可以通过这个方式更新维护. 现在我们已经可以维护一个区间最值连续和了,那么怎么求“环”的最小连续和呢?显然如果最小区间横跨1和n是不能表示出来的(比如最小区间是2,1,n,n-1之和),那么我们可以转化为求sum-Mmax即区间和减去区间最大值…
题目链接: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 #…
引自:wonter巨巨的博客 定义 dp[i] := 以数字 i(不是下标 i)为结尾的最长上升长度 然后用线段树维护 dp[i]: 每个节点维护 2 个信息,一个是当前区间的最大上升长度,一个是最大上升长度的方案数, 这里再详细说下这篇题解...也是弱弱自己的理解吧... 以1-n的值为线段树所代表的区间: 然后依次更新,题目就是要找上升序列,那么我们只要每次查询0~arr[i]-1范围内最长的那个长度和方案拿出来: 然后再去0到n区间里更新,更新的值是arr[i],长度为查询到的x+1,方案…
题目描述 现在有一堆数字共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%的数…
题目描述 虽不能至,心向往之. $Treap=Tree+Heap$ 椎$=$树$+$堆 小$\pi$学习了计算机科学中的数据结构$Treap$. 小$\pi$知道$Treap$指的是一种树. 小$\pi$还知道$Treap$节点上有两个权值$k$和$w$,其中$k$满足二叉搜索树性质.$w$满足堆性质. 小$\pi$还知道在$k$和$w$都各不相同的时候,$Treap$的形态是固定的. 但是小$\pi$不知道这道题目的做法. 这道题目要求你维护一个大根堆$Treap$,要求支持$n$个操作: $…