算法模板
DeathYmz
划水摸鱼要不得!!!
不上紫名不改简介=_=(改了改了 打leetcode周赛去了 codeforces太晚了养身要紧)
展开
-
线段树模板
这里暂时不详解线段树了,等自己再明白点再写吧,板子是这样,就是和二叉树概念差不多。需要根据题目的需要,定义节点的值。原创 2022-09-12 22:03:15 · 353 阅读 · 0 评论 -
线段树 模板
线段树模板:对于二叉树来说,2n是左子节点,2n+1是右子节点。建树复杂度为O(n),更新和查询的复杂度都是O(lgn)。要注意对一个区间进行更新的时候不需要一直更新到底,可以提高效率,需要的时候往下带就行。typedef long long ll;const int maxn=50000+10; //数组大小int lazy[maxn<<2]; //懒惰标记in...转载 2019-05-16 22:51:45 · 143 阅读 · 0 评论 -
除法取模(费马小定理+扩展欧几里得)
除法取模以下只说这两个方法1)费马小定理a^(p-1)==1(mod)p a*a^(p-1)=1%Ma/b%mod=a*b^(mod-2)%mod;只有p,mod为素数时,而一般都为素数。b^(mod-2)一般用快速幂typedef long long ll;ll quick_pow(ll a,ll n){ ll ans=1; while(...原创 2018-10-08 20:33:56 · 548 阅读 · 0 评论 -
点的判断与距离:判断点在线段上+在凸变形内+在任意多边形内,求点到点+线段+直线的距离
点线基本结构const double eps=1e-8; const double PI=acos(-1.0);int sgn(double x){ if(fabs(x)<eps) return 0; if(x<0) return -1; else return 1;}struct point{ double x,y; point(...原创 2018-08-25 11:42:10 · 986 阅读 · 0 评论 -
关于线段的一些模板(判断线段相交+判断直线和线段相交+点到线段距离+点在线段上)
来源kuangbin模板关于一些精度const double eps=1e-8; const double PI=acos(-1.0);int sgn(double x)//{ if(fabs(x)&lt;eps) return 0; if(x&lt;0) return -1; else return 1;}点的结构struct point{ ...原创 2018-08-25 10:15:04 · 649 阅读 · 0 评论 -
求三角形面积+多边形面积
三角形面积struct point{ double x,y; }double areaTrian(point A,point B)//三角形面积{ return fabs((B.x-A.x)*(C.x-A.y)-(C.x-A.x)*(B.y-A.y))/2;}简单多边形面积//多边形面积求解,也可以用三角形的方式struct Tpoint{ doub...原创 2018-08-21 22:47:45 · 299 阅读 · 0 评论 -
Graham_Scan 算法(求凸包顶点序列)
Graham_Scan 算法 说明:Graham- Scan是一种灵活的凸包算法,其总的时间复杂度仅为0( nlog n)。Graham扫描法的原理是从点集中先找出一个最左下方的点,可以证明,这点肯定在凸包上,然后以这点为极点,将所有点根据与这点的极角排序,并且同时使用一个栈结构维护凸包上的点。按照极角序依次将点与栈顶的两个点作拐向判断:若右拐,则将当前点加人栈中;否则,将栈顶的点弹出。当遍...原创 2018-08-21 15:53:07 · 1009 阅读 · 0 评论 -
求两直线交点+判断两线段相交+求线段交点
求两直线(线段)交点void getPoint(point p1,point p2,point p3 point p4){ double a0,b0,c0,a1,b1,c1; a0=p1.y-p2.y,b0=p2.x-p1.x,c0=p1.x*p2.y-p2.x*p1.y; a1=p3.y-p4.y,b1=p4.x-p3.x,c1=p3.x*p4.y-p4.x*p3....原创 2018-08-20 19:25:32 · 2327 阅读 · 0 评论 -
计算几何中向量的表示(点,向量,点积,叉积)
点的表示struct point{ int x,y; point(){} point(int _x,int _y){x=_x;y=_y;}};向量的表示struct v{ point start; point end; v(){} v(point _start,point _end){ start=_star...原创 2018-08-19 11:16:44 · 839 阅读 · 0 评论 -
K叉哈夫曼树
**合并排序,代价 K叉哈夫曼树返回代价值**typedef long long ll;const int maxn=100000+10;ll a[maxn];ll b[maxn];ll N,M;ll Hafuman(int k) //返回总代价{ int ai,bi,blen; blen=0;//b数组的长度 ai=bi=0; ll cost=...原创 2018-07-24 15:13:06 · 551 阅读 · 0 评论 -
三点求圆心以及半径
三点求圆心以及半径模板double X,Y,R;struct Point{ double x,y;}pp[maxn];double dis(Point x,Point y){ return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));}void solve(Point a,Point b,Point c)//三点共圆...原创 2018-07-23 21:11:24 · 4393 阅读 · 0 评论 -
大数模板以及一些基本运算
大数模板以及一些基本运算 可以直接用 * -_- *string Except(string s,int x) //大数除以整形数{ int cmp=0,ok=0; string ans=""; for(int i=0;i&lt;s.size();i++) { cmp=(cmp*10+s[i]-'0'); if(cmp&g...原创 2018-07-17 17:58:07 · 291 阅读 · 0 评论 -
Tarjan算法模板
一、Tarjan有向图的强连通//Tarjanconst int MAXN=200100;const int MAXM=500100;struct Edge{ int to,next;}edge[MAXM];int head[MAXN],tot;int Low[MAXN],DFN[MAXN],Stack[MAXN],Belong[MAXN];//belong数组的值是1-s...原创 2018-07-17 17:52:23 · 260 阅读 · 0 评论 -
SPFA模板
SPFA模板const int MAXN=100+10;//点数const int MAXM=10000+10;//邻接表边数int first[MAXN];//初始化为-1bool vis[MAXN];int cnt[MAXN]; //入队次数int que[MAXN];int dist[MAXN];struct Edge{ int to,v,next;}edge1...原创 2018-07-17 09:06:26 · 353 阅读 · 0 评论 -
矩阵快速幂&快速幂
矩阵快速幂&快速幂一、快速幂typedef long long ll;ll quic_power(ll x,ll n,ll mod){ ll result=1; while(n) { if(n&1) { result*=x; result%=mod; ...原创 2018-07-17 08:43:31 · 406 阅读 · 0 评论 -
最大上升子序列&最大下降子序列
一、基础for(int i=1;i<=n;i++){ for(int j=1;j<i;j++) if(a[j]<a[i]) f[i]=max(f[i],f[j]+1); ans=max(ans,f[i]); }二、复杂度o(nlogn) cin>>n>>k; for(int i=0;i&...原创 2018-07-16 22:08:37 · 851 阅读 · 0 评论