
ST表
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
没用的函数
题目链接:没用的函数我们可以枚举右端点,然后不同左端点的 gcdgcdgcd 一共只有 logloglog 段。然后我们暴力维护不同的左端点,然后区间求 maxmaxmax 即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+10;int n,mx[N原创 2021-03-10 14:54:01 · 164 阅读 · 0 评论 -
HDU - 6098
题目链接:HDU - 6098我们枚举每个数字,然后找到他的倍数,这个过程是一个调和级数,所以我们只需要知道每个区间的max即可。用ST表预处理。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10;int n,a[N],f[N][20];inli原创 2020-08-02 18:29:37 · 242 阅读 · 0 评论 -
HDU - 6406
题目链接:HDU - 6406预处理出从起点开始,到每个点的个数,以及每个点作为起点到终点的个数。然后对于当前的点,分段考虑即可。预处理的时候可以用ST表优化。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10;int n,mx[N][20],m原创 2020-07-30 23:47:51 · 269 阅读 · 0 评论 -
HDU - 6701
题目链接:HDU - 6701我们可以分治最大值,然后启发式计算答案。但是对于当前枚举的数字,我们先用最大值和K算出当前的极限端点位置,然后算出这个点之前最远能到的位置。这个都可以预处理。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=3e5+10;int原创 2020-07-29 23:05:39 · 261 阅读 · 0 评论 -
Codeforces - Strip
题目链接:Codeforces - Strip显然可以dp。然后枚举右端点的时候,左端点具有二分性,然后在对于的区间当中从最小的值转移即可。最小值可以用线段树维护。不过似乎这个是单调的,可以直接从最左端的点转移。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int原创 2020-07-21 20:36:38 · 208 阅读 · 0 评论 -
Codeforces - Pair of Numbers
题目链接:Codeforces - Pair of Numbers不难发现,如果我们枚举区间的每个值作为区间的gcd,那么左右端点是具有二分性的,然后二分即可。然后ST表维护区间gcdAC代码:#include<bits/stdc++.h>using namespace std;const int N=3e5+10;int n,f[N][20],a[N],k,ans[N],cnt,res;int ask(int l,int r){k=log2(r-l+1); return原创 2020-07-19 22:32:50 · 211 阅读 · 0 评论 -
Analysis of Pathes in Functional Graph
题目链接:Analysis of Pathes in Functional Graph如果不求最小值的话,可以做到线性,现在有最小值倍增即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+10;int f[N][40],mi[N][40],sum[N][原创 2020-07-19 13:59:58 · 255 阅读 · 0 评论 -
Codeforces - Minimal Segment Cover
题目链接:Codeforces - Minimal Segment Cover如果想到用倍增预处理的话,那么就简单很多了。f[i][j] 为 以i节点开始,用2^j个线段最远能到的点。然后每次循环就可以用一个log解决了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const原创 2020-07-17 18:57:16 · 218 阅读 · 0 评论 -
骚区间
题目链接:骚区间显然我们对每个左端点,可以ST表上二分,找到对应的合法右端点区间。然后枚举右端点,可以在ST表上二分,找到合法的左端点区间,我们把左端点区间排序一下,维护当前合法的左端点位置,然后fenwick上面查询即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const原创 2020-06-26 22:09:19 · 293 阅读 · 0 评论 -
科大讯飞杯 迷宫
题目链接:科大讯飞杯 迷宫先跑出起点到每个点的最短路,然后每个点到终点的最短路。然后枚举是否使用一次机会。如果使用,枚举每个点,到能到的最小到终点的最短路,其实就是矩形查询min。直接ST表维即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#def...原创 2020-04-18 16:53:35 · 332 阅读 · 0 评论