随笔分类 - 洛谷官方题单
摘要:原题链接:https://www.luogu.com.cn/problem/CF19D 题意解读:坐标系支持集中操作:1.添加一个点(x,y),保证不会重复 2.删除一个点(x,y) 3.查询刚好比一个点(x,y)的x,y都大的点,优先看刚好比x大的位置,如果该位置有多个点,取y最小的一个,找到则输
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P2572 题意解读:对于01序列,支持几种操作:0.将区间值全变成0 1.将区间值全变成1 2.将区间值全部取反 3.查询1的个数 4.查找连续最多1的个数 解题思路:区间修改,区间查询,又是线段树的典型应用。 要查询的值
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P4145 题意解读:对于序列a[n],支持两种操作:1.对区间[l,r]内每个数开方 2.查询区间[l,r]每个数的和 解题思路:区间修改,区间查询,可以用线段树解决。 咋一看,需要借助于懒标记来修改节点,但仔细分析,开方
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P5522 题意解读:有若干0/1/?组成的字符串,支持两种操作:1.将制定位置字符串修改成新字符串;2.查询区间内字符串能否统一成一个字符串,求有多少种可能;将2的所有结果异或起来,再和0异或,输出最终答案。注意:?表示可
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1558 题意解读:给定序列a[n],初始都为1,支持两种操作:1.将区间[a,b]所有值都改为c;2.查询区间[a,b]范围有多少个不同的数;输出所有操作2的结果。 解题思路:又是线段树的典型应用,要支持区间修改,需要用
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1637 题意解读:统计序列a[1]~a[n]中三元上升子序列的个数,三元上升子序列是指对于1<=i<j<k<=n有a[i]<a[j]<a[k],(a[i],a[j],a[k])成为一组上升子序列。 解题思路: 1、先思考
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P6492 题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。 解题思路:序列支持单点修改(0->1,1->0),
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1471 题意解读:给定序列a[n],支持三种操作:1.将区间每个数加上一个数 2.查询区间的平均数 3、查询区间的方差 解题思路:要支持区间修改和查询,首选线段树,下面看线段树节点需要维护的信息 平均数 = 区间和 /
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P4513 题意解读:给定序列a[n],支持两种操作:1.查询区间[l,r]内的最大子段和 2.将a[x]修改成s,输出其中每一个查询操作的结果。 解题思路:区间问题依然想到线段树,问题主要在于线段树的节点要维护哪些信息:
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3373 题意解读:对于序列a[n],支持三种操作:1.对区间每个数乘上一个数 2.对区间每个数加上一个数 3.求区间和 解题思路:由于支持乘、加两种区间修改操作,是线段树的另一种典型应用:多个懒标记 显然,这里需要两个懒
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1253 题意解读:对于一个序列a[n],支持三种操作:1.将区间[l,r]所有数设置为x;2.将区间[l,r]所有数加上x;3.查询区间[l,r]的最大值 解题思路:典型的线段树求解区间问题。 线段树节点需要维护如下关键
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1438 题意解读:给定序列a[n],支持两种操作:1.给区间[l,r]每个数增加一个对应位置等差数列的元素,首项k,公差d;2.查询第x个元素值 解题思路:直接用线段树求解。 要实现区间修改,需要引入懒标记,而这里修改的
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3870 题意解读:有n个数的序列,初始都是0,支持两种操作:将区间[l,r]内所有数异或1,求区间[l,r]内1个个数,输出所有求区间1的个数操作的结果。 解题思路: 灯的开关可以用0,1表示,改变灯的状态可以用异或操作
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3372 题意解读:我们知道,对于一个序列,单点修改区间求和或者区间修改单点求和都可以借助树状数组,而求区间最值可以借助ST表,如果既要进行区间修改,又要进行区间求和或者求最值等其他查询操作,且复杂度都在O(logn),可
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P2161 题意解读:本题前面形式化描述已经足够清晰。 解题思路: 要判断线段之间是否有冲突(包含或者交叉),可以借助set,参考:https://www.cnblogs.com/jcwy/p/18447333 只不过这里要
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P5677 题意解读:所谓好的配对,通过分析公式∣ax−ay∣≤∣ax−ai∣(i≠x),可以得知就是一个ax与其差的绝对值最小的形成的配对,在数轴上就是距离ax最近的点ay,配对是下标(x,y),给定若干个区间[l,r]
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1908 题意解读:求逆序对,前面介绍过归并排序的做法,参考:https://www.cnblogs.com/jcwy/p/184077,这里介绍树状数组的做法。 解题思路: 设数组a[n]里的整数只包括1~n,显然对于此
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3368 题意解读:树状数组应用-区间修改,单点求值 解题思路: 设原数组为s[N],其差分数组为a[N] 操作一:区间修改 要对s[x] ~ s[y]每个数增加k,相当于对a[x]加k,对a[y + 1]减k,O(n)的
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3374 题意解读:树状数组模版:单点修改,区间求值。 解题思路: 树状数组-Binary Index Tree可以动态维护一组数,可以O(logn)的修改一个数,也可以O(logn)的计算一段区间的和。 思考一下朴素做法
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P2251 题意解读:求窗口m内的最小值 解题思路:直接用单调队列求解即可 100分代码: #include <bits/stdc++.h> using namespace std; const int N = 100000
阅读全文