摘要:
本题仔细分析发现也是一个二维偏序问题,并且因为强制在线,所以不能用莫队来做,因此考虑分块的做法 这道题,因为题目第一个要求是距离小于半径,因此我们直接算出距离后,通过对距离排序,之后分块 这样的分块就会产生一个性质,在某些块中的所有半径都小于r,而在边界块中,则使用暴力。 在块中我们按质量排序 之后 阅读全文
摘要:
典型的分块例题,和区间众数差不多,本题必须用不带log的做法,因此我们考虑前缀和,因为显然的是,区间中某数的个数都可以用前缀和表示 我们设计一个前缀和表示前i块数j的个数是多少个 然后设计一个d数组表示i-j块之间的答案是多少,这就是分块的基本思想,大块直接维护答案,小块暴力枚举 之后在暴力枚举的时 阅读全文
摘要:
一道经典的分块例题,因为我们通过观察可知,区间众数要不就是中间所有块上的答案,要不就是两边小块上出现过的值 因此我们可以分块处理,只要预处理块与块之间的答案即可,因为本题没有修改操作 另外这题比较卡常,块的大小要先算好,不过也有复杂度更低的算法 #include<algorithm> #includ 阅读全文
摘要:
这道题的思维比较巧妙,考察了异或的性质。 首先我们分析最大的情况,分析这种情况就是要考虑哪些情况两个路径必须相同,那么只有一种情况,就是某一个节点下面有多个叶子节点,因为这样,叶子节点之间只有两条路径,因此这两条路径上的值必须相等。而其他情况的话就可以乱放使得满足题意,因为我们可以选取任意的权值,所 阅读全文
摘要:
这道题本质上是一个二维数点的模板,并且是强制在线的,因此可以用树套树,但是我不会树套树 可以想到一个暴力的方法,就是分块,分完块后,每块动态维护一个vector,因为我们发现,交换两个数后,只有在l-r区间内并且范围在a[l]-a[r]之间的数才会收到影响 这样我们就可以通过vector查找范围 分 阅读全文
摘要:
这道题只需要暴力做即可,注意的是题目有可能给的是大的串包含小的串,比如lo loro这种。因此我们要优先考虑匹配大的 这题我刚开始用了错误的写法,从头遍历给的字符串,如果有匹配就匹配,这是不对的,因为比如这种情况 lo loropo 一旦给的串是loropo ,这样如果先匹配了lo,就没法找到答案 阅读全文
摘要:
模板题 #include<iostream> #include<queue> #include<cstring> using namespace std; const int N=1e5+10; const int inf=0x3f3f3f3f; int dis[N]; int st[N],n,m; 阅读全文
摘要:
比较简单的dp,第一眼的想法肯定直接转移,这样是n^3的复杂度,因此我们需要一些小技巧 仔细观察发现,可以用前缀和来维护答案,这样转移就很快了,只需要找到两个边界点就行 我分了a<b和a>b两种方式讨论,这样比较直观一些。 #include<algorithm> #include<iostream> 阅读全文
摘要:
CDQ分治不但能解决三维偏序问题,还能将某些问题的动态版本变成静态。 比如这题是单点修改,区间查询,这样我们就可以将输入的顺序当作时间轴,之后进行CDQ分治 按x轴排序后,对y进行树状数组加减,这道题就变成了x比他小,并且y也比他小的个数查询 这题还用到了简单的容斥原理,也就是二维前缀和的思想来求取 阅读全文
摘要:
这道题的题意是求 j<i aj<=a0[i] a1[j]<=a[i] 这样的三维上升子序列 发现也是一道三维偏序问题,因此考虑用CDQ分治 对于第一位,我们按照惯例作为时间轴,但是这一次,查询要在前面,因为这里第一位是小于号,所以我们先查询再更改就不会弄到自己 我们将查询的权值设为a0[i],而修改 阅读全文