上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 38 下一页
摘要: 设$f[i]$表示$i$点按下开关后会影响到的点的集合,用二进制表示。不妨设$n$为偶数,令$m=\frac{n}{2}$,对于前一半暴力$2^m$搜索所有方案,用map维护每种集合的最小代价。对于后一半暴力$2^m$搜索所有方案,在map中查询补集。时间复杂度$O(n2^{\frac{n}{2}}... 阅读全文
posted @ 2015-11-08 02:56 Claris 阅读(642) 评论(0) 推荐(0)
摘要: 建立Trie,那么成为答案的串必须满足其终止节点到根路径上没有其它点。对于Trie上每个节点维护一个bitset,表示哪些字符必须在哪些字符之前。每到达一个可能成为答案的终止节点,对图进行拓扑排序进行判定。时间复杂度$O(26^2N+26|S|)$。#include#include#define r... 阅读全文
posted @ 2015-11-07 01:10 Claris 阅读(412) 评论(0) 推荐(0)
摘要: 取$M=\sqrt{300000}$。设$g[i]$表示程序员的$\bmod i$最小的值。若$Yconst int N=300010,M=550;int n=300000,m=n/M,q,i,x,pos[N],st[M],f[N],tag[M],g[M];char op[5];inline voi... 阅读全文
posted @ 2015-10-29 23:48 Claris 阅读(885) 评论(0) 推荐(0)
摘要: 考虑离线操作,求出每个向量存在的时间区间,用时间线段树来进行分治,在每个节点求出凸壳后,询问时在凸壳上三分答案。时间复杂度$O(n\log^2n)$。#include#includetypedef long long ll;const int N=200010,M=4000000;int n,m,i... 阅读全文
posted @ 2015-10-29 01:48 Claris 阅读(793) 评论(1) 推荐(0)
摘要: 首先对b串做kmp求出nxt数组。设f[i][j]表示考虑了a的前i个字符,在b中匹配到了j的最长长度,按照kmp算法直接转移即可。$ans=n-\max(f[n][j])$。时间复杂度$O(nm)$。#include#include#define N 1010char a[10010],b[N];... 阅读全文
posted @ 2015-10-28 00:31 Claris 阅读(363) 评论(0) 推荐(0)
摘要: 首先求出SCC,把图缩点成一个DAG。通过拓扑排序+DP求出:dp0[x]:从x点出发能到的点的集合。dp1[x]:能到x的点的集合。对于一条边x->y,将它改为双向边后,形成的新的SCC的点数为dp0[x]&dp1[y]中1的个数,用bitset维护。时间复杂度$O(\frac{n^3}{32})... 阅读全文
posted @ 2015-10-27 18:24 Claris 阅读(420) 评论(0) 推荐(0)
摘要: 若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到。如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$。#include#includeconst int N=100010,M=1800000;int n,m... 阅读全文
posted @ 2015-10-12 22:53 Claris 阅读(448) 评论(0) 推荐(0)
摘要: 离线算法:先将所有涉及到的串建成字典树,然后用线段树维护dfs序,时间复杂度$O(m\log L)$。在线算法:用替罪羊树动态维护Trie树的dfs序即可,时间复杂度$O(L\log L)$。#include#include#includeusing namespace std;const int ... 阅读全文
posted @ 2015-10-12 21:54 Claris 阅读(352) 评论(0) 推荐(0)
摘要: 首先通过不断翻转坐标系,假设三个点以横坐标为第一关键字,纵坐标为第二关键字排序后A在B前面,B在C前面。那么只需要处理以下两种情况:1.B的纵坐标在AC之间,这时三个点的距离和为$2((x_C+y_C)-(x_A+y_A))$。可以用线段树处理出每个点作为B时$x_A+y_A$以及$x_C+y_C$... 阅读全文
posted @ 2015-10-12 17:26 Claris 阅读(643) 评论(0) 推荐(0)
摘要: 整体二分+树状数组套Treap,时间复杂度$O(n\log^3n)$。#include#include#include#define N 100010using namespace std;int n,m,tot,i,X0,Y0,X1,Y1,cq,bx[N],by[N],bz[N],ans[N],t... 阅读全文
posted @ 2015-10-11 22:51 Claris 阅读(377) 评论(0) 推荐(0)
摘要: 设f[i][j]为第i张图中j点所在连通块的编号,加边时可以通过启发式合并在$O(dn\log n)$的时间内维护出来。对于每个点,设h[i]为f[j][i]的hash值,若两个点hash值相等,则它们在d张图中均连通。#includetypedef unsigned long long ll;co... 阅读全文
posted @ 2015-10-11 18:25 Claris 阅读(743) 评论(2) 推荐(0)
摘要: 树的点分治,将点分治的过程记录下来,每一个分治结构按到分治中心的距离维护所有点。对于一个点二分答案,然后在$O(\log n)$个分治结构中二分查找,时间复杂度$O(n\log^3n)$。#include#includeconst int N=50010,M=1000010;int n,m,i,x,... 阅读全文
posted @ 2015-10-09 21:50 Claris 阅读(457) 评论(0) 推荐(0)
摘要: 考虑将序列分成$\sqrt{n\log n}$块,每块维护下凸壳,修改时在相应块打上需要修改的标记。查询时,对于两端零散部分暴力查询。对于中间的块,如果有修改标记,则暴力重构。然后在凸壳上查询时不断把小于$T$的左端点踢出,那么最后如果凸壳上还有点,那么左端点一定$\geq T$。时间复杂度$O(m... 阅读全文
posted @ 2015-10-09 01:38 Claris 阅读(567) 评论(0) 推荐(1)
摘要: 建立线段树,每个节点维护该区间内的最优线段。插入线段时,在线段树上分裂成$O(\log n)$棵子树,若与当前点的最优线段不相交,那么取较优的,否则暴力递归子树。查询时在叶子到根路径上所有点的最优线段中取个最优的即可。时间复杂度$O(n\log^2n)$。#include#include#inclu... 阅读全文
posted @ 2015-10-08 19:25 Claris 阅读(557) 评论(1) 推荐(1)
摘要: 如果S==T,那么答案为0。如果S与T不连通,那么答案为inf。否则,S到T的最短路径上至少有一条边。求出以S为源点的最短路图,是个DAG,随便抓一条S到T的最短路,记为P。设dpS[x]表示在这个图上,能到达x点的离S最近的在P上的点,可以通过拓扑排序+DP求出。然后求出以T为源点的最短路图,在T... 阅读全文
posted @ 2015-10-08 00:15 Claris 阅读(1191) 评论(0) 推荐(0)
摘要: 把集合A[i]看作i点的前驱点集合,建成一个DAG,并新建超级源S,向每个前驱集合为空的点连边,那么B[i]就是S到i的必经点集合。首先使用Lengauer-Tarjan算法建立出以S为起点的Dominator Tree,那么B[i]就是i在树上的所有祖先。对于一个询问,构造出虚树,然后统计虚树上每... 阅读全文
posted @ 2015-10-07 02:42 Claris 阅读(326) 评论(0) 推荐(0)
摘要: 离散化后通过树状数组求出:b[i]为i之前比它小的。c[i]为i之前比它大的=i-1-i之前小于等于它的。d[i]为i之后比它小的。e[i]为i之后比它大的=n-i-f[i]。f[i]为i之后小于等于它的。则:$cnt_{123}=\sum_{i=1}^n b[i]e[i]$$cnt_{321}=\... 阅读全文
posted @ 2015-10-07 02:08 Claris 阅读(280) 评论(0) 推荐(0)
摘要: 一维的情况:排序后维护一个单调指针即可,时间复杂度$O(n\log n)$。二维的情况:旋转坐标系后转化为二维数点问题,扫描线+树状数组维护即可,时间复杂度$O(n\log n)$。三维的情况:将后两维旋转坐标系,对于每个x,预处理出横坐标为x的点的后两维的二维前缀和。枚举一个点,再枚举另一个点的x... 阅读全文
posted @ 2015-10-07 00:45 Claris 阅读(676) 评论(0) 推荐(0)
摘要: 设$a[i][j]$表示$(i,j)$右下角要增加多少$aj[i][j]=a[i][j]\times j$$ai[i][j]=a[i][j]\timesi$$aij[i][j]=a[i][j]\timesi\timesj$则查询$(x,y)$左上角内的权值和时,答案$=(x+1)(y+1)ask_{... 阅读全文
posted @ 2015-10-06 02:58 Claris 阅读(663) 评论(0) 推荐(0)
摘要: 将输入的Trie建成AC自动机,并建出fail树。那么操作1等价于在给定点的子树的并集里都加1。操作2等价于查询给定点到根节点路径的并集的权值和。求出DFS序后,对于操作1,将点按进入时间戳从小到大排序,然后求出并集,进行区间修改即可。对于操作2,构造给定点集的虚树,在虚树的每一条边上询问权值和,累... 阅读全文
posted @ 2015-10-06 01:43 Claris 阅读(303) 评论(0) 推荐(0)
上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 38 下一页