摘要:
FDUSC前刷刷题吧。。本题每个询问就是说将询问串与主串每个后缀匹配,若匹配成功则结束,否则加上lcp的长度对主串建立后缀树,并用主席树维护DFS序对于每个询问串,找到最后走到的点fin_node(在边上就往下走),并求出完成匹配的后缀的位置match(若匹配成功则是fin_node子树中的最小值,... 阅读全文
摘要:
本题就是找一个受力平衡的点我们一开始假设这个点是(0,0)然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案#include#include#define N 10000int n,i;double x[N],y[N],w[N],a,b,sumx,sumy,d... 阅读全文
摘要:
题目没有强制在线!考虑离线做法。把操作建立成一棵树的结构,然后按照欧拉序遍历,每次转移要么是一次合并操作,要么是一次撤销合并操作,可以看成是分离操作。用LCT维护集合,合并就是加边,分离就是删边。时间复杂度$O(m\log n)$#include#define N 20010int n,m,i,op... 阅读全文
摘要:
同[ZJOI2012]网络,把每个点拆成C个点然后用LCT维护。#include#include#define P make_pair#define N 800002using namespace std;int f[N],d[8002][102],son[N][2],a[N],n;bool rev... 阅读全文
摘要:
设d[x]表示x到根的距离 size[x]表示x的子树大小(不含自己)求出dfs序后按dfs序建主席树,线段树中区间[a,b]表示深度在[a,b]范围内的size[]的和查询x,y的答案=size[x]*min(d[x],y)+dfs序在st[x]+1到en[x]之间且深度在d[x]+1到d[x]+... 阅读全文
摘要:
求环套外向树上节点数不小于K的路径数。首先树的话直接点分治+树状数组$O(n\log^2n)$搞定环套树的话,先删掉多余的边(a,b)然后变成了一棵树,直接点分治然后在树上找到a到b的路径,将每一棵子树中的点的“所有权”(要么从a出发到达,要么从b出发到达)改变一下,然后计算贡献即可。总时间复杂度$... 阅读全文
摘要:
设delta表示翻转后的增量,flip表示是否翻转,第x个位置对应原来位置为(flip?n+2-x+delta:x-delta)%n再根据x,y的大小关系以及flip的是否讨论出现在作用的区间用线段树维护最左端最右端的颜色和块数这种神级码农题我居然一遍AC…#include#define N 500... 阅读全文
摘要:
若一条边的v小于等于u,则贡献为l*w/v,否则贡献为l*w/u将边按v从小到大排序,将询问按u从小到大排序用树链剖分维护链上和,val[0]表示第一种情况下的贡献,val[1]表示第二种情况下的贡献一开始val[0]都是0,val[1]=l*w,然后每到一个询问(s,t,u),就把所有v小于等于u... 阅读全文
摘要:
rank[i]表示第i美味的是哪块left[i]表示在k左边美味度为i的是哪块right[i]表示在k右边美味度为i的是哪块用3棵线段树分别维护d序列的区间最大值、left序列的区间最大值、right序列的区间最小值修改:把第x块改成第y美味把第y+1到第9美味的全部后移一位然后把第x块美味度改成最... 阅读全文
摘要:
求[l,r]内所有点与z的lca的深度之和= 求z所有祖先子树中在[l,r]内的点的个数之和由于数据不是随机的,所以祖先个数可能很大。按编号分成$\sqrt{n}$块设ans[i][j]表示第i块内所有点与j的lca的深度之和计算ans[i][]时,把在[l,r]内所有点的cnt设为1,其它的设为0... 阅读全文
摘要:
以下是一只蒟蒻的回忆:1.进入高一小县城不重视OI,直到进了高中才知道有OI这个东西,于是我就开始了OI…(看,够弱的吧,相信你是小学就开始学了)学了几天Pascal语法后,被老师报上了NOIP2012,(捂脸),才学几天怎么去考试啊…2.NOIP2012初赛第一次出去比赛,因为才学几天,考试当然... 阅读全文
摘要:
“我这双眼就是被神题亮瞎的。”T1 2048,由于我从来都没有玩出过512以上的东西,外加SDOI提答题的影响,所以弃疗了。T2 SG,一看数据规模,最小也有10^9,这是诚心不给部分分,诚心不想要区分度了是吧?事实证明此题区分度确实低。打表找了1h规律无果后只好写了个K=1的Nim弃疗。T3 感... 阅读全文
摘要:
求出前缀和对于每个结尾i,设现在取的区间是[j+1,i],则i-R#include#include#define N 500010#define M 10000000using namespace std;int n,i,j,K,L,R,sum[N],b[N],l[M],r[M],val[M],ro... 阅读全文
摘要:
假设S在T左边,那么只能往右或者上下走f[i]表示S到i点的最短路f[i]=min(f[j]+dis(i,j)(i能看到j))判断i能看到j就维护一个上凸壳和一个下凸壳时间复杂度$O(n^2)$代码写的有点长…#include#include#include#define N 2010using n... 阅读全文
摘要:
由于n很大,有2e8,所以不能直接用splay来维护排名把splay修改一下每个节点维护一个区间[l,r],表示编号在[l,r]之间的所有点都在这里需要支持一个takeout操作:把编号为k的玩家分离出来,成为一个独立的点先找到它所在的大点xsplay(x)然后分裂成1-3个节点关于如何查找编号为k... 阅读全文
摘要:
对于既要支持子树修改又要支持链查询,需要树链剖分然后求出DFS序,DFS的时候先DFS重儿子,然后子树是1个区间,链是$O(\log n)$个区间这道题对于查询若干条链的并:由于K#include#define N 200010#define K 17using namespace std;int ... 阅读全文
摘要:
关于如何判断一个集合是否出现过:给每个元素随机一个hash权值,然后xor起来即可插入删除都只需xor线段树维护区间有效人数和,以及打标记表示这个区间的集合要全部标记为出现过,并把区间内sum值都置0写hash用了map被虐了TAT#include#include#define N 100010#d... 阅读全文
摘要:
题目是要求最小乘积最小权匹配,将一种方案看做一个二维点(x,y),x=a值的和,y=b值的和,所有方案中只有在下凸壳上的点才有可能成为最优解首先要求出两端的方案l,r两个点l就是a值的和最小的方案,r就是b值的和最小的方案然后递归work(l,r)即可得出所有在下凸壳上的点work(l,r){ 找到... 阅读全文
摘要:
终于还有一周就是ZJOI Day2了不知不觉中半年过去了呢去年我还是一个无知的弱逼,学完语法后学了半年基础,又做了半年基础题终于在NOIP上的惨败让我发现自己是有多弱逼于是只好硬着头皮去刷BZOJ并立下Flag:高二剩下半年各种比赛能去的一定要去打一把“太弱了怎么打比赛”只能没日没夜地刷题,学习为... 阅读全文
摘要:
很明显网络流。S到每个发射站连边,容量为该站限制每个接收站到T连边,容量为该站限制矩阵每个点拆成两个点i和i',i向i'连边,容量为该位置手机数每个发射站向该正方形内所有点i连边,容量为无穷大每个接收站向该正方形内所有点i'连边,容量为无穷大求最大流即可。但是这样的话,TLE+MLE(内存限制只有3... 阅读全文