模板
HumveeA6
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(模板)Splay维护区间序列(洛谷P3391)
题目: 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入格式: 第一行为n,m n表示初始序列有n个数,这个序列依次是1,2,3,……,n, m表示翻转操作次数 接下来m行每行两个数 [l,r][l,r] 数据保证 1≤l≤r≤...原创 2018-07-11 17:18:48 · 617 阅读 · 0 评论 -
(模板)KMP算法
写了几种版本,首先是string版的。string大法吼哇!!! 这里的next1[i]指的是在0~i-1构成的字符串中有多大长度的相同前缀后缀,同时也是模式串str2[i]匹配失败后跳转到的位置。同时值得注意的是这里的字符串是从0开始的#include<cstdio>#include<iostream>#include<cstring>#inc...原创 2018-03-27 19:59:44 · 186 阅读 · 0 评论 -
(模板)求乘法逆元
1.扩展欧几里得求乘法逆元 原理就是解线性同余方程;void exgcd (ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return ; } exgcd (b, a % b, x, y); ll tmp = x; x ...原创 2018-04-10 09:53:32 · 742 阅读 · 0 评论 -
logn的最长公共子序列
最长公共子序列(LCS)最常见的算法是时间复杂度为O(n^2)的动态规划(DP)算法,但在James W. Hunt和Thomas G. Szymansky 的论文”A Fast Algorithm for Computing Longest Common Subsequence”中,给出了O(nlogn)下限的一种算法。 定理:设序列A长度为n,{A(i)},序列B长度为m,{B(i)},考虑...原创 2018-04-02 20:53:07 · 470 阅读 · 0 评论 -
洛谷P1160
很明显是要用链表的,主要写写用指针的链表,然后要注意一个技巧就是如何快速地查找某个学生的位置。在这道题中,所有的数据均为整数,所以我们可以让同学们的号码和que一 一对应。也就是说,如果需要寻找i号同学,直接使用que[i]即可,这么做不仅使我们的代码更为简单易懂,更重要的是节约了大量的宝贵时间。然后,用指针写的链表也有两种选择,即你是用一个指向数据类型的指针数组还是直接一个保存数据类型的数组。感...原创 2018-03-26 17:44:16 · 442 阅读 · 0 评论 -
(模板)卡时间
rt,用时候用于二分死循环什么的还是可以的.头文件要包含ctime,然后clock()函数返回运行时间,以毫秒为单位,注意,此时间并不是完全程序开始运行的时间。应该在程序开始时加入begin=clock(),然后,在想要终止的地方 写:if(clock()-begin)>2000)break; 后面的数由oj允许时间决定。如果是1000ms一般最多卡到950… ...原创 2018-04-02 19:53:19 · 381 阅读 · 0 评论 -
(模板)Mac os下对拍程序
在Mac os下的对拍与Windows还是有些不同。以a+b为例,将下面4个cpp编译后的可执行文件放在同一个文件夹中,然后在终端中输入命令即可开始对拍; 正解(test):#include &lt;iostream&gt;int main() { freopen("test.in","r",stdin); freopen("test1.out&qu原创 2018-04-02 17:57:18 · 1333 阅读 · 3 评论 -
洛谷P3808 AC自动机复杂版
这题有个数据非常鬼畜,反正我的板子莫名会wa一个地方,改改虽然对了但是还是有点懵逼。#include<cstdio>#include<iostream>#include<algorithm>#include<vector>#include<cstring>#include<queue>#include<...原创 2018-03-29 17:50:04 · 274 阅读 · 0 评论 -
(模板)AC自动机
说明链接:https://blog.youkuaiyun.com/creatorx/article/details/71100840 代码:(其中有个地方需要非常注意)// luogu-judger-enable-o2#include<cstdio>#include<iostream>#include<algorithm>#include<queue...原创 2018-03-29 17:43:05 · 245 阅读 · 0 评论 -
(模板)树状数组 (区间修改,单点查询)
引入一个叫做查分数组的东西,感觉思想有点像lazytab。区间[l,r]所有值+k改成”位置l加上k,位置r+1减去k” 查询的时候直接查询sum(x)就行;(参考题目:洛谷P3386)#include<cstdio>#include<iostream>using namespace std;typedef long long ll;const int max...原创 2018-03-13 18:07:00 · 205 阅读 · 0 评论 -
(模板)树状数组 (单点更新,区间求和)
小心爆int,注意位运算的方式即可;int bit[500005],n,m;typedef long long ll;ll sum(int i){ ll s=0; while(i){ s+=bit[i]; i-=i&-i; } return s;}void add(int i,int x){ whi...原创 2018-03-13 17:19:35 · 441 阅读 · 0 评论 -
(模板)线段树(单点更新,单点求值)
最主要的区别就是不用lazytab了,所以不需要pushdown了,不过还是跟复杂版的有所区别的…小心对待 (原题是洛谷P1198,数据加强以后要记得特判数列为空的情形)#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef long long...原创 2018-03-12 23:00:47 · 266 阅读 · 0 评论 -
链表test
非常无聊的单链表,实现了增加,释放,排序等非常基础的内容 基础链表:#include<cstdio>#include<iostream>using namespace std;struct node{ int val; node*next1; node():next1(0){};}*head=new node();//head为虚拟...原创 2018-03-27 23:08:30 · 201 阅读 · 0 评论 -
关于__int128
这种类型只有部分GCC编译器支持。经测试,正常运算与普通int无异,但是输入输出时无论是cin,cout还是printf都会报错,所以必须自己写输入输出函数。 定义时与别的数据类型并没有什么区别 eg: __int128 a,b,c; cin&gt;&gt;a&gt;&gt;b&gt;&gt;c; 方法一:重载输出std::ostream&amp; operator&l原创 2018-04-03 17:44:58 · 15317 阅读 · 7 评论 -
(模板)Splay 平衡树
不会讲解,直接上板子,按照洛谷P3369的要求#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int MAXN=1000000;int ch[MAXN][2],f[MAXN],size[MAXN],cnt[MAXN],key[MAXN];...原创 2018-07-10 20:34:58 · 300 阅读 · 0 评论 -
有上下界的网络流 做法总结
无源汇可行流建图方法 将有上下界的网络流图转化成普通的网络流图首先建立附加源点ss和附加汇点tt 对于原图中的边x-&amp;gt;y,若限制为[b,c],那么连边x-&amp;gt;y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)&amp;gt;0,那么连边ss-&amp;gt;i,流量为d(i) 若d(i)&amp;lt;0,那么连原创 2018-05-30 21:58:03 · 656 阅读 · 0 评论 -
LOJ 116 有源汇有上下界最大流(模板)
建图方法 将有上下界的网络流图转化成普通的网络流图首先建立附加源点ss和附加汇点tt 对于原图中的边x->y,若限制为[b,c],那么连边x->y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)>0,那么连边ss->i,流量为d(i) 若d(i)<0,那么连边i->tt,流量...原创 2018-05-30 21:53:28 · 426 阅读 · 0 评论 -
LOJ 117 有源汇有上下界最小流(模板)
建图方法 将有上下界的网络流图转化成普通的网络流图 首先建立附加源点ss和附加汇点tt 对于原图中的边x-&amp;amp;gt;y,若限制为[b,c],那么连边x-&amp;amp;gt;y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)&amp;amp;gt;0,那么连边ss-&amp;amp;gt;i,流量为d(i) 若d(i)&amp;原创 2018-05-30 21:48:21 · 449 阅读 · 1 评论 -
字符串的最小表示法(模板)
循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。 对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得...原创 2018-05-24 19:55:10 · 383 阅读 · 0 评论 -
(模板)扩展KMP算法
#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;/* 求解T中next[],注释参考GetExtend() */void GetNext(string T, int next1[]){ int t_len = T.size(); next1[0] = t_len; int a;...原创 2018-05-23 21:07:52 · 264 阅读 · 0 评论 -
二维树状数组(模板,单点更新区间求和)
updata:在(x,y)处加上v query:区间(0,0)到(x,y)的所有数之和 sum:容斥原理求区间所有数之和,(x,y)左上角,(xx,yy)右下角。坐标是从左往右,从上往下增大。int N;int c[maxn][maxn];inline int lowbit(int t){ return t&(-t);}void update(int x,int ...原创 2018-06-03 17:36:10 · 453 阅读 · 0 评论 -
计算几何基础
文章的绝大部分内容参(chao)考(xi)自Menci菊苣的blog,放在这主要是为了自己参考,做了一点点自己比较适应的改动(其实是C++水平太低看不懂233) 原blog链接:https://oi.men.ci/geometry-notes/const double EPS=1e-10;bool dcmp(double x,double y=0){ return fab...原创 2018-05-05 00:12:56 · 414 阅读 · 0 评论 -
POJ3608(旋转卡壳求两个多边形最短距离)
不是特别会搞这个问题,大致思想跟凸包内部求最远点对类似。先抄一发留作模板233#include<stdio.h>#include<algorithm>#include<queue>#include<string.h>#include<iostream>#include<math.h>#include<...原创 2018-05-09 19:52:09 · 1219 阅读 · 0 评论 -
(模板)Trie树(字典树)
模板按照的是洛谷P2580的要求写的,query函数返回3种状态:不存在此单词,存在且第一次查询,存在且多次查询 指针版:#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;cstring&gt;#include&lt;algorithm&a原创 2018-03-28 22:45:24 · 465 阅读 · 0 评论 -
(模板)高精度算法
高精度加法,减法,乘法,通过重载运算符及自定义数据类型实现;#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&lt;cstring&gt;using namespace std;const int N=4005;char A[N],B[N];struc原创 2018-04-03 21:08:47 · 371 阅读 · 0 评论 -
(模板)线段树(区间双重更新,区间求和)
题目可参见洛谷P3373 已知一个数列,你需要进行下面三种操作:1.将某区间每一个数乘上x2.将某区间每一个数加上x3.求出某区间每一个数的和首先先说明本题的思路。题目要求有三种操作,两种是不同的在线修改,还有一种是在查询取模后的结果。而这两种操作又是区间乘法和区间加法,我们可以惊喜的发现这两种操作对于取模运算来说都是自由的!但是面对非常大的数据,我们必须思考怎么样用线段树优雅的...原创 2018-03-12 20:25:19 · 626 阅读 · 0 评论 -
(模板)线段树 (区间更新,区间求和)
已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某区间每一个数的和(参见洛谷P3372) 后面query和update的部分一定要小心begin,end和left,right不要弄混了。 可以认为left和right在整个程序中都是在代表一个范围#include<cstdio>#include<iostream>#include&...原创 2018-03-12 19:01:02 · 540 阅读 · 0 评论 -
(模板) 最小生成树Prim算法
算法跟Dijkstra很像 ,但是要特别注意两点:1.最好使用一个额外的数组来保证每个点只被访问一次,否则的话应该保证在35行处使用e.dis>=dis[e.num]而不仅是>,否则会造成一些相等的额外相加。 2.40行的地方要注意与Dijkstra的区别!!不是加而是直接换!!!#include<cstdio>#include<iostream>#i...原创 2018-03-04 22:57:13 · 177 阅读 · 0 评论 -
线性同余方程(模板)
#include<cstdio>#include<iostream>#include<cmath>using namespace std;typedef long long ll;ll extgcd(ll a,ll b,ll&x,ll&y){ if(b==0){ x=1,y=0;return a; ...原创 2018-02-17 15:33:57 · 759 阅读 · 0 评论 -
强联通分量tarjan算法(模板)
没啥好说的,唯一要注意的就是那些单独的点每个点都会被当做自身一个强联通分量,也就是有不少的强连通分量里面可能只有一个元素……直接上代码int dfn[105],low[105],scccnt=0,sccindex=0,belong[105];bool instack[105];stack<int>sta;vector<int>G[105];void tarjan...原创 2018-03-07 20:42:31 · 335 阅读 · 0 评论 -
质数筛选(模板)
埃拉托斯特尼筛法:#include<cstdio>#include<iostream>using namespace std;bool notprime[10000005];void checkprime(int n){ for(int i=2;i<=n;i++){//注意线性筛法做完以后1是没有被标记的... if(notp...原创 2018-02-13 14:04:36 · 209 阅读 · 0 评论 -
欧拉函数(模板)
1~n中与n互质的数的个数称为欧拉函数,证明如下:实现如下:int eular(int x){ int res = x, a = x; for (int i = 2; i*i <= a; i++) { if (a%i == 0) { res = res / i*(i - 1); while (a%i...原创 2018-02-14 16:49:58 · 340 阅读 · 0 评论 -
欧几里得算法(模板)
GCD(欧几里得算法)#include<cstdio>#include<iostream>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}int main(){ int x,y; cin>>x>>y; cout<...原创 2018-02-13 11:17:52 · 407 阅读 · 0 评论 -
memset常用数据
在通常的场合下,0x3f3f3f3f真的是一个非常棒的选择。 其他赋值: memset(arr,0x7F,sizeof(arr)); //它将arr中的值全部赋为2139062143,这是用memset对int赋值所能达到的最大值 类似的还有: memset(arr,0x80,sizeof(arr)); //set int to -2139062144 memset(arr,0x7F,s...转载 2018-02-13 12:13:04 · 320 阅读 · 0 评论 -
快速幂(模板)
对于任何一个整数的模幂运算 a^b%c 对于b我们可以拆成二进制的形式 b=b0+b1*2+b2*2^2+…+bn*2^n 这里我们的b0对应的是b二进制的第一位 那么我们的a^b运算就可以拆解成 a^b0*a^b1*2*…*a^(bn*2^n) 对于b来说,二进制位不是0就是1,那么对于bx为0的项我们的计算结果是1就不用考虑了,我们真正想要的其实是b的非0二进制位 那么假设...原创 2018-02-09 12:06:30 · 259 阅读 · 0 评论 -
快速乘法(模板)
由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题. 快速乘法的原理就是利用乘法分配率来将a*b转化为多个式子相加的形式求解(注意这时使用乘法分配率的时候后面的一个乘...原创 2018-02-09 11:47:19 · 631 阅读 · 0 评论 -
并查集模板
rt,没啥好说的。一定记得要把每个par初始化为自己!!!!int find(int x){ if (x == par[x]) return x; else return par[x] = find(par[x]);//后面这一块不要漏了par[x]!!!否则就是不带路径压缩(有时候有用)}void unite(int x, int y...原创 2018-02-03 00:34:31 · 229 阅读 · 0 评论 -
归并排序模板
纯c实现:#includevoid mergearray(int*a, int first, int mid, int last, int*temp){ int i = first, j = mid+1, k = last,m=0; while (i last) { if (a[i] < a[j]) temp[++m] = a[i原创 2018-02-01 23:06:18 · 201 阅读 · 0 评论 -
重载运算符 test
rt,重载了priority_queue中的#include#include#includeusing namespace std;struct edge { int to, cost;};priority_queueque;bool operator <(const edge &a, const edge &b) { return a.cost > b.cost;}原创 2018-02-01 17:04:34 · 203 阅读 · 0 评论 -
(模板)割点(割顶)tarjan类算法
题目的大致描述:给出一个n个点,m条边的无向图,求图的割点。 个人说不清楚,放几个图吧 代码如下:vector<int>G[100005];int sccindex=0,low[100005],dfn[100005];bool vis[100005],gd[100005];int ans=0;void tarjan(int v,int fa)//其实这题...原创 2018-03-08 16:45:55 · 420 阅读 · 0 评论
分享