上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 38 下一页
摘要: 将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列。那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可。将$($看成$1$,$)$看成$-1$,设$s[]$为前缀和。如果当前取出的是$()$,那么对前缀和的影响为$[A,B-1]$区间加$1$。如... 阅读全文
posted @ 2016-01-12 16:57 Claris 阅读(1837) 评论(1) 推荐(2)
摘要: 二分一个最大的位置$x$,计算$t=\sum_{i=1}^k\lfloor\frac{x}{a_i}\rfloor$。如果$t\leq n$,那么说明就算全部检票员都走到了这里,也不够$n$个指令,所以可以先将所有检票员尽量向$x$位置走,并将用掉的指令数扣除。然后将$x$适当往前调整,使得每个检票... 阅读全文
posted @ 2016-01-11 16:47 Claris 阅读(626) 评论(0) 推荐(1)
摘要: 首先求出后缀数组,得到本质不同的子串的个数。然后二分答案,每次先通过后缀数组求出第$mid$小的子串,然后贪心进行检验。检验的时候,从后往前贪心,每次加入一个后缀,如果不能加了,那就划为一段。时间复杂度$O(n\log n)$。#include#include#include#define N 10... 阅读全文
posted @ 2016-01-10 20:35 Claris 阅读(1206) 评论(0) 推荐(2)
摘要: 设$pre[i]$表示第$i$个数上一次出现的位置,$d[i]=abs(a[i]-a[i+1])$。用线段树维护区间内$a$的最小值、最大值,$pre$的最大值以及$d$的$\gcd$。对于询问$l\ r\ k$,首先特判掉$l=r$或者$k=0$的情况。然后求出区间最小值和最大值、以及$pre$的... 阅读全文
posted @ 2016-01-08 19:01 Claris 阅读(1286) 评论(0) 推荐(0)
摘要: 枚举$B$串的每个后缀,统计出该后缀所有满足条件的前缀。考虑暴力搜索,设状态$(x,y,z)$表示当前需要考虑$A$从$x$开始的后缀,$B$从$y$开始的后缀,之前部分编辑距离为$z$。那么首先用后缀数组+ST表求出两个后缀的lcp,$x$和$y$都可以向右跳那么多,且不产生任何代价。如果此时匹配... 阅读全文
posted @ 2016-01-06 20:14 Claris 阅读(702) 评论(0) 推荐(1)
摘要: Link-Cut Tree维护。每个点x维护以下信息:v:这个点的点权s:实链上的信息和st:子树信息和(不包括链上)sa:子树+链上的信息和as:所有虚儿子的sa的和则有s[x]=v[x]+s[son[x][0]]+s[son[x][1]]st[x]=as[x]+st[son[x][0]]+st[... 阅读全文
posted @ 2016-01-06 00:50 Claris 阅读(607) 评论(1) 推荐(0)
摘要: 注意到这个过程实质就是prim算法求最大生成树的过程。首先通过离散化+线段树将$A+B$个点缩为上下各$O(n)$个点。设已加入集合为$S$,未加入集合为$T$。建立两棵线段树,维护所有在$T$集合中的点,以及从每个点连出去的边。用一个大根堆维护所有横跨$ST$的边。每次取出堆顶的边,取出与这条边相... 阅读全文
posted @ 2016-01-04 21:55 Claris 阅读(465) 评论(0) 推荐(0)
摘要: 设$f[i][j]$表示$hp$为$i$,在$j$点的概率,$d[i]$表示$i$的度数,$w[i]$表示经过$i$点要扣掉的血量。对于$j$到$k$这条边,$f[i-w[k]][k]+=\frac{f[i][j]}{d[j]}$。若$w[k]>0$,则直接将贡献加给$f[i-w[k]][k]$,否... 阅读全文
posted @ 2016-01-03 01:52 Claris 阅读(742) 评论(0) 推荐(0)
摘要: 过去的2015这一年,感觉非常漫长,发生了好多好多的事情。1月,翻译某道POI的时候被lavendir发现不是BZOJ权限用户,结果他居然把权限免费送给了我!打开了新世界的大门。2月,寒假写完作业无聊着没事干,随便切了几道水题,被家长发现,“离高考只有几个月了,要安心学习”,于是家长就开始监控我的提... 阅读全文
posted @ 2016-01-02 03:03 Claris 阅读(6168) 评论(8) 推荐(15)
摘要: 显然当且仅当$\gcd(i,j)=1$时才对答案有贡献,化简得\[\begin{eqnarray*}ans&=&\sum_{i=1}^n\sum_{j=1}^i\mu(ij)[\gcd(i,j)=1]\\ &=&\sum_{i=1}^n\sum_{j=1}^i\mu(ij)\sum_{d|i,d... 阅读全文
posted @ 2015-12-21 16:01 Claris 阅读(1011) 评论(0) 推荐(0)
摘要: 求出所有交点后从左往右扫描线,用每段的中位线去截所有三角形,算出长度并后乘以该段长度即可,时间复杂度$O(n^3\log n)$。#include#include#includeusing namespace std;const int N=310;const double eps=1e-9,inf... 阅读全文
posted @ 2015-12-21 01:32 Claris 阅读(692) 评论(2) 推荐(0)
摘要: 因为欧拉函数是非完全积性函数,所以可以考虑对每个数进行分解质因数,将每个质数的解乘起来即可。对于一个质数$p$,设它在各个数中分别出现了$b_1,b_2,...b_n$次,那么由生成函数和欧拉函数的性质得,它对答案的贡献为:\[(\prod_{i=1}^n\frac{p^{b_i+1}-1}{p-1... 阅读全文
posted @ 2015-12-20 01:25 Claris 阅读(397) 评论(0) 推荐(0)
摘要: 把询问看成二维点,建立kd-tree,每个点维护一个计数器。从1到n依次加入每个数,每次加入一个数时,对于所有包含它的询问,计数器加一,对于其它询问,计数器置0。那么每个询问的答案就是计数器的历史最大值,可以通过打标记实现。时间复杂度$O(n\sqrt{m})$。#include#includeco... 阅读全文
posted @ 2015-12-15 18:32 Claris 阅读(1693) 评论(12) 推荐(2)
摘要: 一个直观的想法是把每条边拆成两条有向边,同时每条有向边是新图中的一个点。对于两条边a->b与b->c,两点之间连有向边,费用为两条边费用的最大值。然后新建源点S与汇点T,由S向所有起点为1的边连边,T接受所有终点为n的边,那么答案就是S到T的最短路。这样子的边数为$O(m^2)$,不能承受。考虑枚举... 阅读全文
posted @ 2015-12-15 00:07 Claris 阅读(1553) 评论(0) 推荐(1)
摘要: 对操作建立线段树,每个节点维护一个有序的操作表,表示用$[l,r]$的操作在每段区间上的作用效果。对于一个线段树节点,合并左右儿子信息只在该区间刚刚被填满时进行,利用归并排序,时间复杂度为$O(n\log n)$。查询的时候在线段树上分裂成$O(\log n)$个点,在每个点的表里进行二分查找即可,... 阅读全文
posted @ 2015-12-11 02:29 Claris 阅读(531) 评论(0) 推荐(0)
摘要: $\gcd(ab,k)=\gcd(\gcd(a,k)\times \gcd(b,k),k)$设$f[i][j]$表示前$i$行,与$k$的$\gcd$为$j$的方案数,$h[i]$表示当前行选一个或两个,乘积与$k$的$\gcd$为$i$的方案数,然后DP即可。时间复杂度$O(N(M+K))$。#i... 阅读全文
posted @ 2015-12-10 00:02 Claris 阅读(401) 评论(0) 推荐(1)
摘要: 按时间一步一步模拟。每一次,首先将所有没有水但是可以被灌到水的管子标记为有水,然后求出有水的管子里水面高度的最小值。如果$a$号管有水且最小值为$b$,那么说明此时蜘蛛碰到了水。如果有管子溢出且最小值就是它,那么说明此时无论如何水面都不会再上涨,即无解。然后往所有高度等于最小值的管子里灌上一高度的水... 阅读全文
posted @ 2015-12-08 21:12 Claris 阅读(647) 评论(0) 推荐(0)
摘要: 设$f[i][j][k]$为到达$(i,j)$,用时为$\frac{k}{5lcm}$小时的最低耗油量,然后DP即可。#includeconst int N=12,M=210005;const double inf=1e15;int n,L,lcm,lim,i,j,k,p,x,y,a[N],b[N]... 阅读全文
posted @ 2015-12-08 16:19 Claris 阅读(637) 评论(0) 推荐(0)
摘要: 平面图求域之后增加超级根,然后建图求最小树形图即可。#include#include#include#includeusing namespace std;typedef long long ll;const int N=3010,M=10010,inf=0x7fffffff;int n,m,q,c... 阅读全文
posted @ 2015-12-08 00:56 Claris 阅读(346) 评论(0) 推荐(0)
摘要: 首先要将这个图连通,方法是通过扫描线+set求出每个连通块最高的点上方的第一条边,然后向交点连边。然后把边拆成两条双向边,每次找到一条没走过的边,找到极角排序后它的反向边的后继,直到回到这条边。根据叉积可以求出面积,如果面积非负,那么就说明找到了一个封闭区域。然后再进行一次扫描线,找到一个点上方最低... 阅读全文
posted @ 2015-12-07 12:13 Claris 阅读(817) 评论(0) 推荐(2)
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 38 下一页