- 博客(15)
- 收藏
- 关注
原创 单调队列优化DP
#include<cstdio>#include<iostream>#include<cstring>#include<deque>using namespace std;int n,l,r;struct Node{ int val,num;};deque<Node>q;int dp[410000],a[41000...
2018-07-27 20:33:36 455
原创 EXGCD:青蛙的约会
题目好暴力啊题目链接:青蛙的约会代码:(里面有注释)//EXGCD:返回的值为最大公约数,但是里面已经处理了x,y #include<cstdio>#include<iostream>#include<algorithm>#define ll long longusing namespace std;ll x,y,n,m,l,a,b;...
2018-07-25 19:24:47 205
原创 单调队列
链接求区间最小值本来是要用RMQ写的,但是发现貌似会超时?(雾),so用单调队列来直接过一遍#include<cstdio>#include<iostream>using namespace std;int p[2100000],a[2100000],n,m;int main(){ cin>>n>>m; int l=1,r=0; for(int i=1;i<=n
2017-10-27 15:21:10 197
原创 数论——扩展欧几里得
作为一个刚学数论的蒟蒻,看扩欧还是费了半天时间的…… 先发一下一道exgcd的题叭qwq 同余方程 一开始看是不会正解的,,,真的是一点也没法跟扩欧联系在一起qwq。然后又重新找各种博客、题解,终于能把这两个东西联系在一起,,, 先看一下扩欧的定义: 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的
2017-10-24 20:40:57 252
转载 导弹拦截
转载自洛谷@yhwtd。 题目:导弹拦截一个手写二分查找求最长不下降子序列和最长上升子序列的方法要过加强的数据就只能用NlogN的方法,第一个问就是求最长不下降子序列长度,第二个问求最长不下降子序列的个数其实(我也不能证明)就是求最长上升子序列长度,而NlogN求最长上升子序列的方法是用一个数组d[]存放一组“潜力最大的数字”,它存的并不是最长上升子序列,长度一样,并且“潜力”更大,而且每次更新长
2017-10-24 18:56:39 227
原创 Dijkstra——最小堆优化
Dijkstra+堆优化题目链接:文化之旅写完才发现这道题数据范围好小…完全可以用floyed写。不过正好顺便练练自己的代码能力orzdijkstra+堆优化 思路主要是通过优先队列来贪心的把最短路放进队列,从而减少时间复杂度,变成nlog(n)。代码如下。 #include<cstdio> #include<cstring> #include<iostream> #
2017-10-22 18:18:41 2373
原创 线段树优化——lazytag
线段树嘛,NOIP的重点,手打模板理解一发(部分借鉴notonlysuccess的线段树,侵删) 题目:线段树模板——洛谷 前言 朴素线段树都是有以下几个操作: 1.query(区间求和) 代码如下 int Query(int L,int R,int l,int r,int root) { if(L<=l&&R>=r) return tree[
2017-10-19 16:05:59 886
原创 二分答案
二分答案是NOIP的重点适用范围:二分答案的做法适用于题目答案满足某种意义上的单调性,直接求解难以接受,并且验证解是否可行较为容易的题目,常见的模型有“求xx的最值”“求最少/多需要多少xx才能满足xx”等。而二分的模型增加的时间复杂度只有log(区间长度),基本可以接受。时间复杂度:logn.如果暴力枚举,那么会做许多无用功。我们来设想一下。同样假设答案是上界,如果我们check了10000,发现
2017-10-07 17:01:41 593
原创 模板——二分查找
今天十分咸鱼的去洛谷刷了一道二分查找的题。本来自信AC结果崩了…发现还是有一些细节的,来记录一下。 保龄球——luogu 直接发代码好了,注意的地方用注释标记。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int n,q;int b;struct pan{ int a;
2017-08-23 19:36:28 430
原创 模板——快速幂
1.萌新的话 快速幂主要是用来解决一些超时间复杂度的幂运算。其主要思想是根据一个结论:2^n=4^(n/2).这样原本暴力的O(n)算法优化为了O(logn)的算法了。(时间复杂度–!!!) 2.代码#include<algorithm>#include<cstdio>#include<cstring>#include<iostream>#include<queue>using nam
2017-07-31 21:57:36 216
原创 多重背包的二进制优化
引言——dp里面的背包问题。多重背包是指每个物品有c[i]个数量,如果普通的进行dp,f[i][v]=max{f[i-1][v-k*c[i]]+ k*w[i]|0<=k<=n[i]},那么会TLE(虽说我也不知道到底是多少…dalao们帮忙说下呗),如果将数量进行二进制拆分时,那么时间复杂度会显著减少( QAQ我也不知道是多少啊啊啊orz,跪求大佬)1.思想。 将一个数二进制拆分后变为2^0+2
2017-07-31 18:40:37 552
原创 模板——最小生成树
题出自洛谷p3366最小生成树#include<cstdio>#include<iostream>#include<algorithm>using namespace std;inline int read(){ int p,data=0; char ch=0; while((ch!='-')&&ch<'0'||ch>'9') ch=getchar(); i
2017-07-29 19:25:28 247
原创 STL库——next_permutation用法
next-permutation用于全排列,比dfs不知道高到哪里去了~(+1s) 1.基本框架int a[];do{}while(next_permutation(a+1,a+n+1));2.代码#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int main(){ int a
2017-07-29 15:36:21 395 2
原创 kruskal算法应用——口袋的天空
本题出自洛谷p1195,记录一下并查集的经典用法 口袋的天空 1.由于是有权值的一个图,所以可以用并查集来实现。由于要算出最小的和,所以先进行一次排序,将权值最小的边放在队首。由于要分成K份,总数为N,所以用一个计数器(N–)。如果N的大小恰好等于K时,说明已经分成了K份,剩下的没在并查集里的都是权值大的。 2.代码#include<algorithm>#include<cstdio>#i
2017-07-28 21:11:29 632 2
原创 合并果子
经典二叉堆——合并果子萌新第一次写博客233,为了记录一下这道经典的题的二叉堆做法。(以后再忘记就尴尬了233)。 原题:合并果子 1.基本二叉堆的建立: –建立一个小根堆void binary_heap(int x){ while(x/2>=1) { int j=x/2; if(a[j]>a[x]) {
2017-07-28 13:38:42 333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人