自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(265)
  • 收藏
  • 关注

原创 暑期训练待补

Cheating and Stealing 繁琐Finding Points 计算几何Interval Queries 回滚莫队+链表Hasse Diagram min25筛Gambling Monster FWT

2021-08-21 10:41:12 211

转载 Linux常用命令大全

目录系统信息关机 (系统的关机、重启以及登出 )文件和目录文件搜索挂载一个文件系统磁盘空间用户和群组文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消打包和压缩文件RPM 包 - (Fedora, Redhat及类似系统)YUM 软件包升级器 - (Fedora, RedHat及类似系统)DEB 包 (Debian, Ubuntu 以及类似系统)APT 软件工具 (Debian, Ubuntu 以及类似系统)查看文件内容文本处理字

2021-03-11 14:49:16 260

原创 ACM模板合集

目录数据结构STL以及基础数据结构并查集线段树树状数组平衡树树套树可并堆根号1\sqrt11​LCT字符串字符串匹配字符串其他数学数论线性代数组合数学网络流最大流最小割费用流图搜索最短路负环最短路建图最小生成树连通性相关欧拉路径二分图树上问题其他离线分治算法随机化数据结构STL以及基础数据结构STL用法合集单双链表单调栈单调队列并查集基础并查集边带权并查集扩展域并查集可持久化并查集Krusual重构树线段树基础线段树扫描线李超线段树吉老师线段树可持久化线段树(主

2021-01-22 22:45:51 729 3

原创 HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)

Boring String ProblemZeronera题解预处理sum数组记录不同字符串的个数,即sum[i] = n- sa[i] + 1 -height[i] + sum[i-1] (n为原串长度)对于每个k 若k > sum[n] 则输出0 0 ,即k大于不同子串的总数否则,二分sum数组找到第k小子串所在的sa数组,即找到相应子串所位于的后缀。l=sa[pos],r=sa[pos]+v+height[pos]-1;但是该串的开始位置不一定是最小的,所以顺着sa数组要往后找是

2021-11-13 15:45:56 1193

原创 Graph Theory Class(Min25求1~n质数和)

Graph Theory Class远离不会板子抄的。#include <bits/stdc++.h>#define ll long longusing namespace std;const int N = 10000010;ll n,mod;int prime[N],id1[N],id2[N],vis[N],cnt,m;ll g[N],s[N],a[N],T;int ID(ll x){return x<=T?id1[x]:id2[n/x];}ll calc(ll

2021-11-04 14:42:12 264 1

原创 2021 CCPC E. 被遗忘的计划(循环卷积+快速幂)

E. 被遗忘的计划别人的简洁写法#include<bits/stdc++.h>using namespace std;using ll=long long;const ll INF=0x3f3f3f3f3f3f3f3fll;const ll mod=1e9+7;using vl=vector<ll>;vl operator *(vl a,vl b){ vl v(a.size(),-INF); for(int i=0;i<a.size();i

2021-11-04 10:03:49 505

原创 POJ 2185 Milking Grid(最小重复字符矩阵KMP)

Milking Grid#include<iostream>using namespace std;const int N=2010;char s[10005][80];int n,m;int ne[10005];bool samr(int i,int j){ for(int k=1;k<=m;k++) if(s[i][k]!=s[j][k]) return 0; return 1;}bool samc(int i,int j){

2021-11-02 21:39:01 147

原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)

下面两个题都是选择iii有个价值如果选择iii则不能选择i−1,i+1i-1,i+1i−1,i+1,让价值最大或最小P1792 [国家集训队]种树野心qwq 的博客#include<bits/stdc++.h>using namespace std;const int N=200010;int n,m;int a[N];int fr[N],to[N];priority_queue<pair<int,int>> q;long long ans;bo

2021-11-01 17:36:42 268

原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Cities(区间dp)

区间dp

2021-10-31 19:20:03 246

原创 C. Sum of Log(数位dp)

C. Sum of LogCode1暴力记的状态 TLE#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} while( isdi

2021-10-31 17:45:47 248

原创 F-Lucky Pascal Triangle(Lucas+数位dp)

F-Lucky Pascal Triangleissue是fw题解下面代码TLE了,但是此题数位dp的思想非常值得学习Lucas的过程相当于把n,mn,mn,m在p进制下的每一位拿出来做组合数Lucas(n,m,p)=∏(nkmk) mod p\text{Lucas}(n,m,p)=\prod \dbinom {n_k}{m_k} \bmod pLucas(n,m,p)=∏(mk​nk​​)modp#include<bits/stdc++.h>using namespace s

2021-10-31 17:41:07 279

原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games

Stone Games主席树Code1#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=1000010;using ll=long long;const ll MAX=1000000000ll;int n,a[N],m;struct node{ int l,r; ll v;}tree[N*40];int ro

2021-10-31 14:13:51 185

原创 The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)

J. Jewel GrabTartarus_Wallace_转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k。对于该区间[s,t] 区间数颜色:也就是每种颜色只算一个权值求最大和(显然每种颜色都取最大的权值)于是有下面转化:对于所有区间中出现次数超过一次的元素,找出其中权值最大的求和;对其他的元素(仅仅出现一次)直接求和。计算最终结果。区间数颜色显然要维护一个pre[x]数组表示前一个出现c[x]的位置在哪?

2021-10-22 17:49:33 662

原创 P3899 [湖南集训]更为厉害(线段树合并、长链剖分、二维数点)

Code1线段树合并暴力合并子树#include<bits/stdc++.h>using namespace std;using ll=long long;constexpr int N=300010;int h[N],e[2*N],ne[2*N],idx;void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}int n,q;struct node{ int l,r; ll v;}tree[N*40

2021-10-22 11:11:44 179

原创 The 2020 ICPC Asia Macau Regional Contest A. Accelerator(分治+NTT)

A. Accelerator繁凡さん#include<bits/stdc++.h>using namespace std;using ll=long long;const int N=300010;const int mod=998244353;const int P=998244353;const int G=3,Gi=332748118;int qmi(int a,int b){ int v=1; while(b) { if(b

2021-10-21 22:24:15 914

原创 2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)

Display Substring#include<bits/stdc++.h>using namespace std;typedef long long ll;// sa[i]: 排名是i位的是第几个后缀// rk[i]: 第i个后缀的排名是多少// height[i]: sa[i]与sa[i-1]const int N=100010;char s[N];int rk[N],sa[N],cnt[N],height[N];int x[N],y[N];int n,m;vo

2021-10-21 14:19:01 102

原创 AtCoder Grand Contest 021 D - Reversed LCS(区间dp)

D - Reversed LCS繁凡さん设 f[l,r,k]f [ l , r , k ]f[l,r,k] 表示区间 [l,r][ l , r ][l,r] 中修改 kkk 次能得到的最长回文子序列的长度,直接区间DP转移即可。#include<bits/stdc++.h>using namespace std;const int N=310;int f[N][N][N];char s[N];int n,m;int dfs(int l,int r,int k){ i

2021-10-20 15:36:55 117

原创 SPOJ687 Repeats(重复次数最多的连续子串)

Repeats hihoCoder 1419 后缀数组四·重复旋律4(重复次数最多的连续子串)#include<bits/stdc++.h>using namespace std;// sa[i]: 排名是i位的是第几个后缀// rk[i]: 第i个后缀的排名是多少// height[i]: sa[i]与sa[i-1]const int N=50010;char s[N];int rk[N],sa[N],cnt[N],height[N];int x[N],y[N];int

2021-10-20 13:49:26 102

原创 POJ - 3415 Common Substrings(长度不小于K的公共子串个数)

#include<cstdio>#include<cstring>#include<iostream>using namespace std;typedef long long ll;// sa[i]: 排名是i位的是第几个后缀// rk[i]: 第i个后缀的排名是多少// height[i]: sa[i]与sa[i-1]const int N=200010;char s[N],s1[N],s2[N];int rk[N],sa[N],cnt[N],he

2021-10-20 13:42:10 134

原创 codeforces1552 D. Array Differentiation(思维+暴力)

D. Array Differentiation#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} while( isdigit(ch

2021-10-19 14:40:49 144

原创 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love max and multiply(转化)

I love max and multiplyCode代码抄的std#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} whil

2021-10-19 14:31:50 92

原创 2016 Multi-University Training Contest 1 1004 GCD(ST表+二分)

GCD注意观察gcd⁡(al,al+1,...,ar)\gcd(a_{l},a_{l+1},...,a_{r})gcd(al​,al+1​,...,ar​),当lll固定不动的时候,r=l...nr=l...nr=l...n时,我们可以容易的发现,随着rrr的増大,gcd⁡(al,al+1,...,ar)\gcd(a_{l},a_{l+1},...,a_{r})gcd(al​,al+1​,...,ar​)是递减的,同时gcd⁡(al,al+1,...,ar)\gcd(a_{l},a_{l+1},...,a

2021-10-19 14:22:49 85

原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛 GCD on Sequence(线段树)

#include<bits/stdc++.h>using namespace std;using ll=long long;const int N=100010;vector<int> vec[N];int n,a[N],p[N];ll ans[N];struct node{ int l,r; ll v; int mx,tag;}tree[N<<2];void pushup(int u){ tree[u].v=tre

2021-10-19 10:15:46 392

原创 P3224 [HNOI2012]永无乡(并查集+权值线段树合并/平衡树)

[HNOI2012]永无乡Code1权值线段树天然支持merge,线段树上二分求第k小#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}

2021-10-18 10:53:39 131

原创 #6029. 「雅礼集训 2017 Day1」市场(势能,区间除)

#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} while( isdigit(ch)) res=(res<<1)+(r

2021-10-18 09:17:49 152

原创 [BZOJ5312]冒险(势能线段树)

[BZOJ5312]冒险维护一个长度为 n 的序列,支持 m 次操作,操作包括区间按位或一个数,区间按位与一个数,以及查询区间最大值。#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch==

2021-10-18 09:15:10 157

原创 【模板】后缀数组

ACM模板目录后缀数组string以及sort排序sort+倍增优化 O(nlog⁡2n)O(n\log^2 n)O(nlog2n)基数排序优化如何求height模板题板子后缀数组计数排序 :计算每个数出现了几次;求出每个数出现次数的 前缀和;利用出现次数的前缀和,从右至左计算每个数的排名。从右至左计算每个数的排名是保持排序稳定性的关键基数排序 : 按照k个关键字排序,一般内层排序需要用到计数排序可以求出来的数组:sai\text{sa}_isai​ 排名第 iii 位是第几个

2021-09-23 12:41:18 119

原创 2021“MINIEYE杯”中国大学生算法设计超级联赛(10)Pty loves string(Border+二维数点)

Pty loves string建立Border树后,发现可以转化成两个子树中相同点的数量,时间戳转化为连续的区间后相当于有两个数组,每次给两个区间,问区间相同点权的数目。第一个数组作为区间,第二个数组作为权值。将第一个数组建立主席树,每次插入的是第一个区间位置的权值映射到第二个数组中的权值。然后就是区间查询。#include<bits/stdc++.h>using namespace std;const int N=200010;char s[N];int n,m;int

2021-09-22 16:25:01 151

原创 2021牛客暑期多校训练营8 J-Tree(思维dp+rmq)

J-TreeCosmic_Tree题解赛时队友想到了预处理s→ts\to ts→t路径上的点最远到达的点,后面贪心做的一直wa。正解是dp#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch==

2021-09-01 12:27:22 157

原创 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)

F-Robots第一种第二种机器人直接O(n)O(n)O(n)判断即可。第三种机器人暴力dp,用bitset优化。bitset<250005> b[i][j]表示从(i,j)(i,j)(i,j)能到达哪些点,第三种机器人向右向下转移即可。时间复杂度O(qn+n4w)O(qn+\frac{n^4}{w})O(qn+wn4​)#include<bits/stdc++.h>using namespace std;using ll=long long;template &l

2021-09-01 11:47:39 140

原创 2021牛客暑期多校训练营7 K-xay loves sequence(主席树+二分)

K-xay loves sequence首先不考虑模kkk的限制,容易想到对原数组做一个差分得到di=ai−ai−1d_i=a_i-a_{i-1}di​=ai​−ai−1​,显然对于∀1≤i≤nai=0\forall_{1\leq i\leq n} a_i=0∀1≤i≤n​ai​=0 等价于∀1≤i≤ndi=0\forall_{1\leq i\leq n} d_i=0∀1≤i≤n​di​=0,而对于原数组的区间±1\pm1±1等价于在差分数组ddd中找到两个数一个数+1另一个数-1,或者说找到一个

2021-08-31 13:38:28 260 1

原创 2021牛客暑期多校训练营7 B-xay loves monotonicity(线段树+不降子序列)

P4198 楼房重建线段树维护以某点为开头的最长不下降子序列使用下面calc函数能够计算线段树u维护的区间中,以x为开头最长不下降子序列的个数。calc需要维护区间最值。template<typename T>int calc(int u,T x){ if(tree[u].l==tree[u].r) return tree[u].v>x?1:0; if(tree[u<<1].v<=x) return calc(u<

2021-08-30 15:47:09 162

原创 C++ __gnu_pbds(hash,可并堆,平衡树)

pb_ds 是GNU-C++自带的一个C++的扩展库,其中实现了很多数据结构,比STL里面的功能更强大#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp> // 用tree#include<ext/pb_ds/hash_policy.hpp> // 用hash#include<ext/pb_ds/trie_policy.hpp> // 用trie

2021-08-23 17:02:52 2033

原创 codeforces1559 D2. Mocha and Diana (Hard Version)(并查集+启发式合并+随机化)

D2. Mocha and Diana (Hard Version)RunningBeef题解首先将图1的点与1号点所在的连通块相连,图2类似。然后就是在图1和图2中选择没有和1号点在同一个连通块的点,能连边就连。#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getc

2021-08-23 14:41:09 223

原创 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)

E-Eert EsiwtibAlkaid~walkalone#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} while( is

2021-08-21 10:40:26 231

原创 2021牛客暑期多校训练营5 D-Double Strings(dp+组合数)

#include<bits/stdc++.h>using namespace std;using ll=long long;template <class T=int> T rd(){ T res=0;T fg=1; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();} while( isdigit(ch)) res=(res<<1)+(re

2021-08-21 10:39:49 118

原创 2021牛客暑期多校训练营7 F-xay loves trees(线段树+滑动窗口)

F-xay loves trees考虑在树1中满足条件的一些点,首先不难想到一定是一条链,其次如果点uuu被选择那么在树2以uuu为根的子树的点就禁止被选,于是只需区间+,然后查询区间最值是否存在>1也就是树2中覆盖次数超过2的节点即可。在树1中进行dfs用双端队列维护当前选择的链即可。这样维护一定能找到那条满足题意的最长链#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize("Ofast")#include&

2021-08-20 18:38:08 151

原创 2021牛客暑期多校训练营7 J-xay loves Floyd(最短路+bitset优化集合交)

J-xay loves FloydANJHZ题解abcdhhhh_题解如果di,j=wi,j\text d_{i,j}=\text w_{i,j}di,j​=wi,j​,那么按照题意中的算法仍然能得到正确的结果。此时记cani,j=1\text{can}_{i,j}=1cani,j​=1。如果存在vvv,使得①cani,v=1\text{can}_{i,v}=1cani,v​=1②canv,j=1\text{can}_{v,j}=1canv,j​=1③vvv在iii到jjj的任意一条最短路上

2021-08-20 17:26:56 144

原创 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)Yiwen with Formula(任意模数FFT)

Yiwen with Formula溢流眼泪题解生成函数化成n个多项式乘积,然后分治把他们依次相乘,需要由于指数需要 mod ϕ(998244353)=998244353−1\bmod \phi(998244353)=998244353-1modϕ(998244353)=998244353−1,因此需要任意模数的FFT。。。常数贼大跑不过去#include<bits/stdc++.h>using namespace std;using ll=long long;const in

2021-08-11 22:36:16 212

原创 2021牛客暑期多校训练营6 J-Defend Your Country(无向图点双+思维)

无向图联通分量点u是割点,当且仅当特判树根:u为树根,且u有多于1棵子树u不为树根,在递归树上u存在子节点v,满足:dfnu≤lowv\text{dfn}_u\leq \text{low}_vdfnu​≤lowv​如上图,v想走到u的组先必须经过u,那么u一定是割点。边(u,v)(u,v)(u,v)是割边,当且仅当边(u,v)(u,v)(u,v)为树边,且满足dfnu<lowv⇔dfnv=lowv\text{dfn}_u< \text{low}_v\Leftrightarrow

2021-08-06 14:34:48 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除