随笔分类 - bzoj
摘要:裸的三维偏序。 对x坐标排序,y、z坐标分块。复杂度O(n*sqrt(n*log(n)))。代码很短。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 struct Point{int x,y,z,num;vo...
阅读全文
摘要:以下部分来自:http://www.cnblogs.com/zhuohan123/p/3726306.html此证明有误。DZY系列。这题首先是几个性质: 1.所有球质量相同,碰撞直接交换速度,而球又没有编号,那么就可以直接视作两个球没有碰撞。 2.所有的方向、初始位置都没有任何用处。然后就是速...
阅读全文
摘要:nlogn求出最长上升子序列长度。对每次询问,贪心地回答。设输入为x。当前数a[i]可能成为答案序列中的第k个,则若 f[i]>=x-k && a[i]>ans[k-1] 即可。f[i]表示以a[i]开头的最长上升子序列长度。但这个东西难以统计。so 我们将原序列反序,求f[i] 表示以 a[i]为...
阅读全文
摘要:本意是求最小瓶颈生成树,但是我们可以证明:最小生成树也是最小瓶颈生成树(其实我不会)。数据范围很小,暴力kruscal即可。 1 #include 2 #include 3 using namespace std; 4 struct Edge{int u,v,w;void Read(){scanf(...
阅读全文
摘要:f[i][j]表示第i首歌音量为j是否可能。若是将状态之间建边,那么答案就是max(j){f[i][j]==true&&0 2 using namespace std; 3 int n,vis[51][1001],w[51],limit,sta; 4 void dfs(int cur,int now...
阅读全文
摘要:暴力dp是n^2*m的……我们计算每棵树在每层的答案的时候,都需要计算出从那棵树转移过来最优。但是我们发现,对一棵树而言,从上面转移过来都是一样的,所以我们可以在计算每棵树在每层的答案的时候,先预处理出它应该从上面何处转移过来,消掉一个n。 1 #include 2 #include 3 using...
阅读全文
摘要:若打了一只鼹鼠后,还能打另一只,我们可以在它们之间连权值为1的边。于是答案就是 以m为终点的最长路长度+1。建反图,就是单源最长路。MLE TLE 一时爽。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 ve...
阅读全文
摘要:对n个位置,每个位置维护一个vector。每次插入,可能对MIN_SORT_GAP产生的影响,只可能是 插入元素 和 它的 前驱 后继 造成的,用一个set维护(存储所有序列中的元素)。我们还得维护一个multiset(存储相邻元素的差值),可能对MIN_GAP产生影响,只可能是它在序列中的前一个元...
阅读全文
摘要:权值分块……rank3……没什么好说的。 1 #include 2 #include 3 #include 4 using namespace std; 5 int n,sz,sum,x,y,l[501],r[501],Min,Max,sumv[501],num[250001],m,v[2...
阅读全文
摘要:论NOIP级别的n²算法…… 跟分块比起来,理论上十万的数据只慢4、5倍左右的样子…… 1 #include 2 #include 3 using namespace std; 4 struct Point{int v,p;}t[20001]; 5 bool operator =Ask[i].k)4...
阅读全文
摘要:不多说。比pb_ds还是要快不少的。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 80001 6 int sum,sz,num[N],l[295],r[295],a[N],op[N],en,ma[N],ans...
阅读全文
摘要:权值分块就是快……Rank5…… 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 38001 6 #define INF 2147483647 7 #define min(a,b) (((a)'9';c=getc...
阅读全文
摘要:权值分块,离散化非常蛋疼,只能离散化搞……需要支持操作:删除 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 201001 7 struct Point{int v,p;}tmp[N]; 8 boo...
阅读全文
摘要:pb_ds 裸题,写写权值分块试试能不能过……觉得够呛。P.S.cin读入大量数据会RE。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 using namespace __gnu_cx...
阅读全文
摘要:离散化,分块。预处理出:ans[i][j] 第i块到第j块的逆序对数。f[i][j] 第1~i块中大于j的数的个数。g[i][j] 第1~j块中小于j的数的个数。每次询问时对于整块部分可以O(1)获得。对于零散部分呢?>在一列数的后面添加一个数,逆序对数会增加 数列中比它大的数的个数。>在一列数的前...
阅读全文
摘要:权值分块,虽然渐进复杂度不忍直视,但其极小的常数使得实际运行起来比平衡树快,大多数情况和递归版权值线段树差不多,有时甚至更快。但是被zkw线段树完虐。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 100000...
阅读全文
摘要:权值分块和权值线段树的思想一致,离散化之后可以代替平衡树的部分功能。部分操作的时间复杂度:插入删除全局排名全局K大前驱后继全局最值按值域删除元素O(1)O(1)O(sqrt(n))O(sqrt(n))O(sqrt(n))O(sqrt(n))O(sqrt(n))O(sqrt(n))(懒标记)当然,因为...
阅读全文
摘要:裸的最大匹配。 1 #include 2 #include 3 #include 4 using namespace std; 5 vectorG[2002]; 6 typedef vector::iterator ITER; 7 int n,m,mat[2002],x,y; 8 bool vis[...
阅读全文
摘要:两次dfs缩点,然后n次dfs暴搜。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 2001 6 vectorG[N],rG[N],vs,G2[N]; 7 typedef vector::iterator IT...
阅读全文
摘要:分块,离散化,预处理出:①前i块中x出现的次数(差分);②第i块到第j块中的众数是谁,出现了多少次。询问的时候,对于整块的部分直接获得答案;对于零散的部分,暴力统计每个数出现的次数,加上差分的结果,尝试更新ans。 1 #include 2 #include 3 #include 4 #in...
阅读全文

浙公网安备 33010602011771号
