https://oi wiki.org/ds/seg/ poj3468 区间增减值,区间和。 线段树思想:利用二叉树将每一个区间所需要的值都记录下来。 lazy思想:延迟对叶子节点的修改,要用到的时候才真的去修改,lazy数组记录修改的值。 ...
分类:
其他好文 时间:
2019-11-27 00:35:48
阅读次数:
61
题意:给定n,p,k n个数,然后取连续的一段,让着一段的sum%p<=k,然后求满足条件的最大sum/p /* 取一段[L,R]让这个区间和取模后小于等于k 切记,取模操作符合减法的分配定律 条件可以转化为(sum-pre[L]-suf[R])%p<=k >(sum%p-pre[L]%p-suf[ ...
分类:
其他好文 时间:
2019-11-16 21:24:24
阅读次数:
78
线段树(区间修改,区间和):#include #include #include using namespace std;int c[1000000],n,m;char s;void update(int p,int l,int r,int x,int add){ int m=(l+r) / 2; ... ...
分类:
编程语言 时间:
2019-11-12 10:47:37
阅读次数:
67
超出时间了。。。 class Solution(object): def countRangeSum(self, nums, lower, upper): """ :type nums: List[int] :type lower: int :type upper: int :rtype: int ...
分类:
其他好文 时间:
2019-11-10 19:22:14
阅读次数:
67
考虑每一个位置最多开6次左右就会变成1,然后操作就没有意义了,因此对线段树维护区间和和一个标记,表示是否全部都是1,然后对于修改,如果区间标记不是1就暴力下去,是1就不用操作,复杂度为$o(6nlogn)$ 1 #include<bits/stdc++.h> 2 using namespace st ...
分类:
其他好文 时间:
2019-11-10 09:20:13
阅读次数:
75
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e5+10; 4 int a[maxn]; 5 int sum[maxn<<2],exc[maxn<<2]; 6 void maintain(int k) 7 { 8 ...
分类:
其他好文 时间:
2019-11-09 23:28:29
阅读次数:
88
$\Huge % Dybala$ T1 神奇单调栈,但是有点码农,要对着对拍调很久。 T2 观察到队长跑到i点之后,前面的[1,i)的点都被经过了偶数次,再次到达的时候又得被暗杀 所以通过点i的花费可以看成一个区间和的形式 T3 按拓扑序枚举。 由于起点&终点未知,建超级源汇。 然后最长路一定以源开 ...
分类:
其他好文 时间:
2019-11-06 10:24:27
阅读次数:
59
[灵魂拷问♂]系列 SP1043 GSS1 Can you answer these queries I 题目: "链接" 大致题意:求区间最大子段和,不带修改。 题解: 对于每个线段树节点。维护以下几个值: l, r:左右端点 sum:区间和 val:区间最大子段和 lv:一定包括区间左端点的最大 ...
分类:
其他好文 时间:
2019-11-04 17:52:56
阅读次数:
94
一,线段树做区间乘法 首先要明白,乘法操作高于加法操作 一般的话会开long long ,要去模 对于一个节点o,我们设区间和为sum[o],加法标记为add[o],乘法标记为mul[o] mul标记的初始值是1,add标记初始值是0 在修改值的时候,add的维护需要累加,mul的维护需要累乘 此时 ...
分类:
其他好文 时间:
2019-11-01 20:28:48
阅读次数:
87