首页 > TAG信息列表 > addV

ICPC2018焦作 H题 Can You Solve the Harder Problem?

Pro: https://codeforces.com/gym/102028/problem/H Sol: 用\(SAM\)枚举不同子串后 问题转换为下面这个形式 \(q\)组询问 每次询问包含\(l,r,x\)三个参数,求下式 \[\sum_{i=l}^r max(i,x) \]这个东西是个套路题 离线+线段树+单调栈即可 #include<bits/stdc++.h> #define N 1100000 #d

树链剖分

转载请标明出处,以下部分内容主要转自Ivanovcraft巨佬的博客,加上了一些自己的见解和自己的代码。 对于修改树上的点权值,我们可以想到用树上差分来做。 对于求两点之间路径上的点的权值和,我们可以利用倍增的思想很好的解决这个问题。 可是,当修改与查询结合起来,就不能把这两种方法简

##Segment Tree Template

馅断术模板啦~ 已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上x 将某区间每一个数加上x 求出某区间每一个数的和 输入格式 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初

「线段树」线段树板子 2

如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 这道题要同时满足两个操作,加 和 乘,能满足这样操作的就是我们的Lazy(懒)操作了 唯一注意的地方就是,一定要乘法在加法前进行,若加法在乘法前,那么从父亲节点向下传递

线段树模板二[半转载..

转载声明 解释来自:https://www.luogu.org/blog/running-coder/solution-p3373 进入正题:(以下内容均在sgt结构体内) 此题相对于模板一,加了个区间乘,于是在模板一的基础上需要多开个数组(记录乘法懒标记)、多写个函数(区间乘),还有要把懒标记下放函数做些修改。 变量定义: sum[]:线段树节点对应

线段树(四)——两个标记(add和set)

add无序,set有序。规定同时有两个标记时,表示先执行set再执行add。 1. 更新操作: 1 int op,cl,cr,v; 2 void update(int o, int L, int R) { 3 int lc = o*2, rc = o*2+1; 4 if(cl <= L && cr >= R) { // 标记修改 5 if(op == 2) addv[o] += v; 6 else { setv[o

线段树(2)——区间修改

快速序列操作 (1) 温馨提示:本文只对刘汝佳《训练指南》做注释,将博主初学时难懂的,认为重要的解释一下,只求自己记住它的打法和用法,如有不懂,随意联系,谢谢 关于此文的注释问题: 有些博主读书时遇到的问题,解释就近写在文末,但在阅读时没有对代码产生疑惑的,我都木有注释... sum的新定义 将sum

图-最小生成树算法之Kruskal及其Java实现

1.Kruskal算法 Kruskal算法基于贪心,因此它追求的是近似最优解,也就是说由Kruskal得出的生成树并不一定是最优解。 Kruskal算法求最小生成树的关键在于,每次选取图中权值最小(及贪心),并不会构成环的边,直到所有点都被囊括。一般,边的个数=点的个数-1。 如下无向图: 要找到最小生成树,克鲁斯