自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 收藏
  • 关注

原创 bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游 (线段树+DFS序)

题目描述传送门题目大意:给出一颗n个节点的树,按照一定的顺序激活每个点,并询问每个点到根的路径上经过了多少个已经激活的点。题解这题应该是一眼树链剖分吧。不过拿树链剖分来做其实有点大材小用了。直接线段树+DFS就可以。 每次单点查询,将子树对应的dfs序中的区间+1.代码#include<iostream>#include<cstdio>#include<cstring>#include<al

2017-03-31 21:38:47 530

原创 bzoj 3881: [Coci2015]Divljak (AC自动机+容斥原理+LCA+树状数组)

题目描述传送门题目大意:Alice有n个字符串S_1,S_2…S_n,Bob有一个字符串集合T,一开始集合是空的。 接下来会发生q个操作,操作有两种形式: 1 P,Bob往自己的集合里添加了一个字符串P。 2 x,Alice询问Bob,集合T中有多少个字符串包含串S_x。(我们称串A包含串B,当且仅当B是A的子串) Bob遇到了困难,需要你的帮助。题解简化一下问题,实际上的问题就是给出了一些

2017-03-31 21:01:46 599

原创 bzoj 4358: permu (莫队+栈||KD-tree||莫队+线段树)

题目描述传送门题目大意:给出一个长度为n的排列P(P1,P2,…Pn),以及m个询问。每次询问某个区间[l,r]中,最长的值域 连续段长度。题解1:莫队+线段树用权值线段树维护区间的连续最大长度,左端连续最长,右端连续最长。 应该是比较好想,好写,好调的做法。 时间复杂度O(nn√logn)O(n\sqrt n log n) ,实际测速中貌似会TLE,于是利用毕生所学进行卡常,最终卡时A掉了。

2017-03-31 19:28:03 1493

原创 bzoj 3064: Tyvj 1518 CPU监控 (线段树)

题目描述传送门题目大意:给出一个长度为n的序列,有四种操作。 Q X Y:询问[x,y]的最大值 A X Y:询问[x,y]的历史最大值 P X Y Z:[x,y]中的每个数增加z C X Y Z:[x,y]中的每个数都变成Z题解对于每个区间维护六个值。 tr 区间当前的最大值 mx 区间历史的最大值 cover 区间覆盖 add 区间增加 at 区间历史最大增量 ct 区间历

2017-03-31 16:59:59 699

原创 bzoj 1901: Zju2112 Dynamic Rankings (树状数组套线段树)

题目描述传送门题目大意:给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题。题解其实这道题就是带修改的主席树。。。 将询问离线,对于所有出现的权值离散化。 然后外

2017-03-30 20:28:18 598 3

原创 bzoj 2141: 排队 (树状数组套线段树)

题目描述传送门题目大意:给出一个序列,每次交换两个位置的数,求交换完后整个序列的逆序对数。题解对于一个位置会产生的逆序对数是他前面比他大的数+他后面比他小的数。 我们可以用树状数组套线段树维护一下,外层表示位置在树状数组中该点的控制区间,线段树是权值线段树。 然后每次交换玩了计算一下就可以了。代码#include<iostream>#include<cstdio>#include<algor

2017-03-30 19:32:58 347

原创 bzoj 2674: Attack (整体二分+树状数组套线段树)

题目描述传送门题目大意:   有N座城市和N个太守,N个城市可以看作在二维平面上的N个点。   N座城市的标号为0,1,2,……,N-1。   第i座城市的坐标为(Xi,Yi),镇守这座城市的太守的能力值为Zi。   chnlich每次会选择一个边平行于坐标轴的矩形区域,并奇袭其中太守能力值第K小的城市(奇袭结束之后城市与太守依然存在)。   不过,他的敌人经常会偷偷交换两座城市的太守,防

2017-03-30 17:42:04 553

原创 bzoj 2752: [HAOI2012]高速公路(road) (线段树)

题目描述传送门题目大意:一个n个点的链,有n-1条路径,每条路径有一个花费。会不定期的对连续路段的花费进行区间修改。 对于给定的l,r(l<r)l,r(l<r),在[l,r][l,r]中任选两个点a,b,那么从a到b将期望花费多少费用呢?题解对于路径建立线段树,所以一共有n-1个点。 维护的话有点恶心。 cnt=(r-l+1) 区间点数 size 表示任选两个点有多少种选择 tr 表示区间

2017-03-30 11:37:41 280

原创 bzoj 1758: [Wc2010]重建计划 (01分数规划+点分治)

题目描述传送门题解这道题一直在TLE,但是bzoj发过来的数据都可以在1s内出解,不是很懂为什么。 要最大化所选边的平均值,这是个01分数规划的问题,我们只需要二分答案然后判断树中是否有一条长度在[L,U]之间的链∑s∈eval[s]−mid\sum_{s\in e} val[s]-mid大于0即可。 在点分治中01分数规划的效率要高于在外层01分数规划,因为这样不用每次check的时候都找重心

2017-03-30 10:14:03 874

原创 bzoj 4199: [Noi2015]品酒大会 (后缀自动机+DP)

题目描述传送门题目大意:两个长度为r的子串相同称为r相似。两个r相似的子串的价值是两个子串开头位置的价值乘积。 求r相似的子串数量和最大的代价(r=0…n-1)题解后缀自动机parent树上两个点的lca的len是两个字符串的最长公共后缀,但是这个要求的是开头位置的乘积,所以我就考虑将串反置,建立后缀自动机并构建parent树。 然后在parent树上进行树形DP ,我们知道在parent树上的

2017-03-30 07:32:22 565

原创 bzoj 4556: [Tjoi2016&Heoi2016]字符串 (主席树+二分+后缀数组+ST表||后缀自动机+线段树合并+LCA)

题目描述传送门题目大意:给出一个长度为n的字符串,每次询问[a,b]中的子串与[c,d]的最长公共前缀的长度的最大值题解对字符串建立后缀数组。我们知道两个后缀的最长公共后缀等于区间[rank[i]+1,rank[j]]的height的最小值,那么因为是取min,所以区间的长度越长答案肯定不可能更优。 建立主席树,将i插入到rank[i]的位置,然后在主席树中维护每个区间的最靠左/最靠右的位置。

2017-03-29 21:53:20 743

原创 后缀自动机的性质应用

之前自己整理过后缀自动机的构造,现在再来整理一波性质。最长公共子串这个问题非常常见,大概可以根据难易程度分成两种。两个串的最长公共子串这个问题可以用DP来解决,也可以用后缀数组。 DP的效率比较低,后缀数组的话将两个串用分隔符连接起来求出height数组,取sa[i],sa[i-1]分别属于两个串的height的最大值即可。 那么利用后缀自动机该怎么做呢?我们将A串建立后缀自动机,然后用B串在后

2017-03-29 09:50:41 2912 3

原创 bzoj 3620: 似乎在梦中见过的样子 (KMP)

题目描述传送门题目大意:给出一个字符串,求所有满足形似于 A+B+A ,且len(A)>=k,len(B)>=1 (位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串)的子串的数量。题解感觉这道题自己的做法时间卡的比较紧。 枚举A+B+A的左端点i,对于[i,n]建立失配函数,从i+k+1开始跑匹配。因为是>=k的,所以直接向后匹配即可。统计答案的时候还需判断一下B是否>=1

2017-03-28 17:45:51 635

原创 bzoj 3796: Mushroom追妹纸 (后缀数组+KMP+二分)

题目描述传送门题目大意: 求一个字符串满足 1、w是s1的子串 2、w是s2的子串 3、s3不是w的子串 4、w的长度应尽可能大题解刚开始想用SAM做,想了半天发现不是很可做啊。 还是好好想后缀数组的做法吧。这道题最恶心的限制就是限制3:s3不是w的子串。 那么如果没有这个限制该怎么做呢?我们用间隔符连接s1,s2,用后缀数组求出height数组。答案一定出自相邻两个后缀的height

2017-03-28 16:25:21 757

原创 bzoj 3473: 字符串 (后缀自动机)

题目描述传送门题目大意:给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串?题解同bzoj3277代码#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#define N 200003#define LL long longusing namespace s

2017-03-28 11:28:13 707

原创 bzoj 3207: 花神的嘲讽计划Ⅰ (主席树+hash)

题目描述传送门题解对于每个位置的权值为[i,i+k-1]这一段的hash值。 离散化之后依次插入主席树中。 查询的时候先找到这一段离散后的值,然后查询[x,y-k+1]这一段中是否出现过。代码#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<map>#define ull uns

2017-03-28 10:16:41 344

原创 bzoj 2226: [Spoj 5971] LCMSum (反演)

题目描述传送门题目大意: ∑i=1nlcm(i,n)\sum_{i=1}^n lcm(i,n)题解又要化式子啦,开心。 ∑i=1nlcm(i,n)\sum_{i=1}^n lcm(i,n) ∑d=1n∑i=1ni∗nd[gcd(i,n)=d]\sum_{d=1}^n \sum_{i=1}^n {i*n\over d} [gcd(i,n)=d] n∑d|n∑i=1ndi∗[gcd(i,nd)=

2017-03-28 09:21:45 298

原创 bzoj 1927: [Sdoi2010]星际竞速 (费用流)

题目描述传送门题解这道题刚开始想到的是有上下界的费用流,感觉好麻烦啊,不想写。然后又YY了一种带负权,强制走某些边的方案,结果跑spfa的时候出现了负环== 于是从头开始考虑,对于每个点如果使用了能量爆发模式,那么相当于通过一条不存在的边到达了该点,因为每个点都需要经过至少一次,所以要么是通过某条边到达,要么是用了能量爆发。 对于每个点拆成两个点xi,yi S->xi 容量为1,费用为0 S

2017-03-28 08:05:47 299

原创 bzoj 3158: 千钧一发 (最小割)

题目描述传送门题目大意:给出n个数,每个数有两权a,b。 两个数能同时选,必须满足下面至少一个条件 (1) gcd(ai,aj)!=1gcd(ai,aj)!=1 (2)不存在整数T满足ai2+aj2=T2ai^2+aj^2=T^2 求所选集合∑b\sum b的最大值题解设源汇分别为S,T,对于每个数拆成两个点xi,yi S->xi 容量为bi yi->T 容量为bi xi->yi

2017-03-28 07:50:50 1170

原创 bzoj 1272: [BeiJingWc2008]Gate Of Babylon (容斥原理+Lucas定理)

题目描述传送门题解容斥部分:至少0个超过限制的-至少1个超过限制的+至少2个超过限制的-…. 剩下的就是组合数学的锅了,用插板法然后化简就可以啦。代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define LL long long using namespa

2017-03-27 21:36:35 380

原创 bzoj 1895: Pku3580 supermemo (splay)

题目描述传送门题目大意:给出一个初始序列a1,a2,….,a3, 要求你编写程序支持如下操作: 1. ADD x y D:给子序列ax… ay的每个元素都加上D。 2. REVERSE x y:将子序列ax… ay翻转。 3. REVOLVE x y T:将子序列ax… ay旋转T个单位。 4. INSERT x P:在Ax后插入P。 5. DELETE x

2017-03-27 18:41:27 323

原创 Codeforces 688D. Remainders Game (扩展中国剩余定理)

题目描述传送门题目大意: 给出n个数ci,我们知道x%ci的值,能不能确定出x%k的值。题解虽说给的tag是扩展中国剩余定理,但是没有真的需要写扩展中国剩余定理。 如果两个数x,y在%ci意义下都相同,那么x=y+lcm(ci)∗t(t>0)x=y+lcm(ci)*t (t>0) 如果要唯一确定x%kx\%k的值,那么对于t的任意取值满足(x+lcm(ci)∗t)%k=x%k(x+lcm(ci

2017-03-27 15:41:54 316

原创 bzoj 4591: [Shoi2015]超能粒子炮·改 (Lucas定理)

题目描述传送门题目大意:给出两个整数n,k,n,k<=1018n,k,n,k<=10^{18} 求C(n,0)+C(n,1)+C(n,2)+......C(n,k)  mod 2333C(n,0)+C(n,1)+C(n,2)+......C(n,k) \space \space mod \space 2333题解一道不错的Lucas定理的题。首先这道题有一个很重要的特点,就是模数非常的小。

2017-03-27 14:43:14 1138

原创 bzoj 4403: 序列统计 (Lucas定理)

题目描述传送门题目大意:给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。题解设m=r-l+1,那么我们相当于m个数,每个数选择xi个,使最后的总和为N x1+x2+…+xm=N 这其实就相当于N个球放到M个盒子中,允许出现空盒子的方案数。 利用插板法不难得到答案就是C(N+m-1,m-1) 那么这道题的答案就是ans

2017-03-27 10:18:14 420

原创 bzoj 4712: 洪水 (树链剖分+DP)

题目描述传送门题目大意:给出一颗树,对于每个节点可以花费val[i]的代价把他堵住,使水无法向下流。每个节点的代价可能会在某时刻增加。对于每个询问,求出某个点的子树中的叶子节点(没有子节点)都没有水的最小代价。题解先考虑如果没有点权的修改该怎么做?应该是比较裸的树形DP. dp[i]=min(val[i],∑dp[son[i]])dp[i]=min(val[i],\sum dp[son[i]]),

2017-03-27 09:26:41 533

原创 bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树)

题目描述传送门题目大意:有长为N的数列,不妨设为a1,a2,…,aN 。有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值题解线段树维护加乘标记的裸题。。。代码#include<iostream>#include<cstdio>#include<cstring>#includ

2017-03-26 18:57:12 272

原创 bzoj 4756: [Usaco2017 Jan]Promotion Counting (线段树合并)

题解传送门题目大意:n只奶牛构成了一个树形的公司,每个奶牛有一个能力值pi,1号奶牛为树根。 问对于每个奶牛来说,它的子树中有几个能力值比它大的。题解线段树合并的裸题。感觉线段树合并在处理子树的问题中蛮好用的耶。代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#d

2017-03-26 18:50:07 1367

原创 bzoj 2244: [SDOI2011]拦截导弹 (CDQ分治+DP)

题目描述传送门题目大意:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度、并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于前一发的高度,其拦截的导弹的飞行速度也不能大于前一发。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 在不能拦截所有的导弹的情况下,我们当然

2017-03-26 17:30:07 675 3

原创 bzoj 3963: [WF2011]MachineWorks (DP+CDQ分治)

题目描述传送门题解将所有的机器按照d从小到大排序。 f[i]f[i]表示买入第i台机器后的最大收益,则f[i]=max{f[j]+(d[i]−d[j]−1)∗g[j]+r[j]}−p[i]f[i]=max\{f[j]+(d[i]-d[j]-1)*g[j]+r[j]\}-p[i],其中j<ij<i。 我们将式子写开,得到f[i]=f[j]+d[i]∗g[j]−d[j]∗g[j]−g[j]+r[j]

2017-03-26 14:29:15 587 1

原创 bzoj 1493: [NOI2007]项链工厂 (平衡树)

1493: [NOI2007]项链工厂Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1528  Solved: 654[Submit][Status][Discuss]DescriptionT公司是一家专门生产彩色珠子项链的公司,其生产的项链设计新颖、款式多样、价格适中,广受青年人的喜爱。最近T公司打算推出一款项链自助生产

2017-03-26 08:33:11 294

原创 bzoj 4553: [Tjoi2016&Heoi2016]序列 (CDQ分治+DP+树状数组)

题目描述传送门题目大意:有一个长为n的序列,m个变换,每次变换把x位置的权值变成v.求一个子序列满足在任意变换中都单调不降(任意变换不能同时进行),问子序列的最长长度。题解先考虑暴力DP。如果点j 可以用来更新i的答案。那么所有包含j的变换以及j初值的最大值一定小于等于i的初值。所有包含i的变换以及i的初值的最小值一定大于等于j的初值。也就是max[j]<=a[i],a[j]<=min[i],j<=

2017-03-25 18:31:41 372

原创 bzoj 2428: [HAOI2006]均分数据 (模拟退火)

题目描述传送门题目大意:给出n个数,分成m组,设每组的和是xi 求∑mi=1(xi−x¯)m−−−−−−−−√\sqrt {\sum_{i=1}^m (xi-\bar x)\over m} ,其中x¯=∑mi=1xim \bar x={\sum_{i=1}^m xi\over m}题解暴力所有的方案数时间复杂度应该是O(mn)O(m^n) 我们考虑用模拟退火来做。刚开始先随便分成m组,然后每

2017-03-25 16:03:03 422

原创 bzoj 3939: [Usaco2015 Feb]Cow Hopscotch (CDQ分治+DP)

题目描述传送门题目大意: 游戏在一个R*C的网格上进行,每个格子有一个取值在1-k之间的整数标号,奶牛开始在左上角的格子,目的是通过若干次跳跃后到达右下角的格子,当且仅当格子A和格子B满足如下条件时能从格子A跳到格子B: 1.B格子在A格子的严格右方(B的列号严格大于A的列号) 2.B格子在A格子的严格下方(B的行号严格大于A的行号) 3.B格子的标号和A格子的标号不同 请你帮助奶

2017-03-24 21:45:56 382

原创 bzoj 2253: [2010 Beijing wc]纸箱堆叠 (CDQ分治+DP)

题目描述传送门题目大意:每个物品有三个参数(x,y,z),一个物品只有三个参数同时严格小于另一个物品,才能放到另一个物品中。问最多多少个两两嵌套。题解我们先按照x坐标排好序,然后进行CDQ分治。 分治的时候先计算[l,mid]的中点的答案。 然后按照y排序,将原本[l,mid]中的点一次加入他们z值对应的树状数组中。 [r,mid]中的点从树状数组中查询小于z的区间最小值,更新答案。代码#in

2017-03-24 20:18:20 1035

原创 bzoj 3295: [Cqoi2011]动态逆序对 (CDQ分治+树状数组)

题目描述传送门题目大意:对于序列A,它的逆序对数定义为满足i题解代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 100003#define LL long long using namespace std;struct data{

2017-03-24 17:48:14 351

原创 bzoj 2683: 简单题 (CDQ分治+树状数组)

题目描述传送门题目大意 题解CDQ分治,把询问拆成x1-1,和x2两种操作。 每次将区间中的操作按照横坐标排序,然后二分,加入[l,mid]中的操作,[mid+1,r]中的询问统计[y1,y2]之间的和。代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#defi

2017-03-24 17:02:49 323

原创 bzoj 3784: 树上的路径 (ST表+优先队列+点分治)

题目描述传送门题目描述: 给定一个N个结点的树,结点用正整数1..N编号。每条边有一个正整数权值。用d(a,b)表示从结点a到结点b路边上经过边的权值。其中要求a题解这道题用到了点分治的思想,但是重点应该还是统计答案。 首先在点分治中,我们每个点最多会被遍历logn次,那么我们可以每次点分治的时候将点按照遍历的顺序加入队列,我们每次加入的是以某个节点为起点的路径,那么所有的路径都可以由两条相交于

2017-03-24 15:41:11 456

原创 bzoj 4455: [Zjoi2016]小星星 (容斥原理+DP)

题目描述传送门题目大意:给出一个图和一棵树,让树上的点对应图上的点,问有多少种合法的对应方案。题解一开始想了一个非常不科学的思路.f[i][j][k]f[i][j][k]表示树中的点i对应图中的点j,i的子树对应的集合是k。 但是如果这么写的话不管是容斥还是转移的时间复杂度度都很高,容斥的基本不可做。 然后我们考虑怎样会产生出不合法的对应,那么如果多个点对应了图上的一个点那么一定是不合法的对吧。

2017-03-24 11:26:10 388

原创 bzoj 4596: [Shoi2016]黑暗前的幻想乡 (矩阵树定理+容斥原理)

题目描述传送门题目大意:n个点要修n-1条路(形成一棵树)。有n-1个公司,每个公司可以修建某些路径。求每个公司恰好修建一条路的方案数。题解生成树计数一般都是用基尔霍夫矩阵求行列式来做,关键是怎么解决每个公司恰好修建一条路的限制。 根据容斥原理答案就是:至少0个公司没有修路的方案-至少1个公司没有修路的方案+至少2个公司没有修路的方案……代码#include<iostream>#include<

2017-03-24 07:36:52 461

原创 bzoj 4361: isn (容斥+DP+树状数组)

题解传送门题目大意:给出一个长度为n的序列A(A1,A2…AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。题解f[i][j]f[i][j]表示选取到第i个元素,第i个元素必须选,一共选出了j个元素,选出的元素构成一个不降的子序列的方案数。 这个DP可以用树状数组优化,O(n2logn)O(n^2logn)的求解。 h

2017-03-23 18:45:47 728

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除