自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 指针式线段树 bzoj 1798

学习了指针,重写bzoj 1798数组本质是指针,所以可以buid(tr,1,n)一个Tree *tr指针,tr[1]指的是这个指针指向的下一个位置,不是开数组的那个tr,所以都改成了root#include#include#include#include#define ll long long#define inf 1e9#define md#define N 100

2017-01-22 18:03:11 1143

原创 c++ primer 学习笔记(一)

2.1 基本内置类型2.1.1算数类型short 16位 long 32位 long long 64位(c++11新定义)wchar_t 用于确保可以存放机器最大扩展字符集中任意一个字符char16_t char32_t 为Unicode服务除bool型和扩展的字符型以外,其他整形可以划分为带符号的和无符号的字符型被分为 char/signed char/unsigned

2017-01-20 17:40:01 756

原创 bzoj 2989&&4170: 数列

首先所谓的“可持久化” 就是加入一个新的元素把看成平面上的一个点,graze函数就是曼哈顿距离求点集中曼哈顿距离≤k的,自然要转换为切比雪夫距离的一个矩阵内点的个数然后CDQ分治或者强上数据结构注意矩阵y坐标取min要和1算,因为查询的时候是L-1,而树状数组不允许查询负数位置#include#include#include#include #define ll lon

2016-06-10 21:08:06 743

原创 4556: [Tjoi2016&Heoi2016]字符串

字符串题不会做先想能不能把字符串反过来把字符串反序,建立后缀自动机,利用线段树合并算出每个位置的right集二分答案,用树上倍增找到对应的节点,看是否有[a+mid-1,b]中的数在right集中#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-10#define m

2016-06-09 19:24:04 793

原创 bzoj 3825: [Usaco2014 Dec]Marathon

查询的答案就是完整走过所有点的距离-少走一个点可以减少的距离的最大值。所以线段树维护区间和,还有如果不走每个点,可以少走多少路然后答案就是sum[l+1,r]-max[l+1,r-1]没写%lld wa了一发#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-1

2016-05-22 22:18:34 540

原创 bzoj 4282: 慎二的随机数列

结论:所有的未知数都可以出现在最优解中。所以,把每个确定的数减去它前面未知数的个数,计算lis就行膜拜了一下popoqqq大爷优美的lis#include#include#include#include #define ll long long#define inf 1000000007#define eps 1e-10#define mdusing namespace std

2016-05-22 21:42:30 734

原创 bzoj 4591: [Shoi2015]超能粒子炮·改

S(n,k)=S(n/p,k/p-1)*S(n%p,p-1)+C(n/p,k/p)*S(n%p,k%p)意思是根据lucas定理对于i/p忘记处理sum[0][?]了#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 250

2016-05-18 20:45:23 1087

原创 bzoj 4436: [Cerc2015]Kernel Knights

T集表示已经确定不在S集内的点。对于一个点,如果不存在非T集的点挑战它,那么它一定在S集中。如果存在一个挑战它的点在S集中,那么它一定在T集中。用类似拓扑排序的方法,首先找出所有不被挑战的点,归入S,把这个点挑战的点y归入T集,然后y挑战的点的度数-1.最后剩下一些点在环中,满足每个点都被别人挑战,也挑战别人,因为是二分图,所以保证是偶环,所以把#include

2016-05-18 20:37:37 662

原创 bzoj 4530: [Bjoi2014]大融合

先说一下我的做法:没有强制在线,先建出来这棵树,然后发现x到它父亲的边的答案是 (目前连通块大小-x子树的大小)*(x子树的大小),这个子树大小也是指目前连通块内的子树大小,子树大小可以用线段树维护dfs序,进行线段树合并得到。子树size也可以用树链剖分做。#include#include#include#include #define ll long long#define inf

2016-05-18 20:13:12 791

原创 bzoj 4103: [Thu Summer Camp 2015]异或运算

水题,查询由ai^bj组成的矩形的子矩形内的k大值,行数和询问数都很少,所以可以枚举行数,跑可持久化字典树。注意不能 int l=0,r=2147483674,mid=(l+r)>>1,这个会爆int,开unsigned int 就行。还有,写可持久化主席树又忘了ch[i][0]=ch[pre][0], ch[i][1]=ch[pre][1]#include#include#i

2016-05-18 19:00:09 620

原创 bzoj 4104: [Thu Summer Camp 2015]解密运算

暴力做法: 已知长度为l的所有子串,可以推出长度为l+1的所有子串,比如样例已知长度为1的子串是?AAAABC,而以这些字符开头的字符串的结尾分别是AAAC?AB,而这些字符也是写在对应字符前面的字符,所以得到了子串{A?,AA,AA,CA,?A,AB,BC},然后再用相似的办法推出剩下的子串,但这样太慢了。我们只需要记录那个以?开头的字符串,每次这个字符串前面会加上一个新的字符,然后得知了这

2016-05-18 10:54:45 845

原创 bzoj 4592: [Shoi2015]脑洞治疗仪

线段树维护最长连续段的长度,然后暴力修改,暴力查询,这个复杂度应该是nlogn的。然而我调了好久。。。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 200010using namespace std;struct Tr { i

2016-05-17 20:43:13 1058

原创 bzoj 4590: [Shoi2015]自动刷题机

刷题数是关于n单调递减的函数,所以可以二分答案判断。无解有两种情况,一种是无论n是多少都无法ac这么多题,一种是不存在n恰好ac这么多题,判断一下就好。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 100010using

2016-05-17 15:05:59 809

原创 bzoj 4597: [Shoi2016]随机序列

对于一个表达式序列 ****+??????? 一定有一个表达式序列 ****-??????? 与它相加为0,所以对答案有贡献的是第一个非*之前的序列乘上这个序列出现的次数。对于前i个数组成的序列,出现次数=2*3^(n-i-1),前n个数组成的序列出现次数为1.所以用线段树维护这个式子的值就好了,具体实现看代码#include#include#include#include #defi

2016-05-17 14:48:07 782

原创 bzoj 4571: [Scoi2016]美味

如果没有加法,这就是一道水水的可持久化trie,有了加法,我们就要用可持久化权值线段树,然后按位贪心,查询变成一个区间内是否存在数字。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 4000010using namespace

2016-05-17 11:48:40 1001

原创 bzoj 3569: DZY Loves Chinese II

神题一道。将所有边分为树边和非树边,把所有非树边随机一个权值,然后树边的权值是所有覆盖它的非树边的权值的异或和。如果一个边集的存在一个非空子集的异或和为0,那么树是不连通的。原因是:(1)删除了一条树边和所有覆盖它的非树边,那么这些边的异或和为0(2)一个点的出边只有树边,且删除了所有与它相连的树边,因为这些树边的异或和一定存在一对相同的,所以也对。然后就是如何搞出树边的权

2016-05-17 10:39:39 805

原创 bzoj 2708: [Violet 1]木偶

最优策略一定可以把整个序列分成几段,每一段都是像这样子的红线表示不可匹配。所以可以排序后dp[i]表示前i个数最多删掉多少=max(f[j-1]+cal(j,i)) cal(j,i)表示j到i最多删掉多少个。注意是判断红线相连的两个是否能够匹配,而不是第i个和第i+k个能否匹配#include#include#include#include #define ll lon

2016-05-11 16:07:10 850

原创 bzoj 3702: 二叉树

发现子树中如何排列对于兄弟节点的逆序对是没有影响的,所以统计兄弟节点之间交换和不交换的逆序对数,取较小值即可。用线段树合并时直接计算逆序对的方式可以搞到nlogn。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 200010

2016-05-11 15:22:58 544

原创 bzoj 4000: [TJOI2015]棋盘

矩乘,题意坑爹,那个第一行是中间那一行,所以记录一行的状态就可以了。f[S]表示最后一行状态为S的方案数,然后暴力看能否转移。#include#include#include#include #define ll long long#define ui unsigned int #define inf 1e9#define eps 1e-8#define md#define N 70u

2016-05-11 15:22:39 593

原创 bzoj 4569: [Scoi2016]萌萌哒

一种会T的做法:发现并查集加边只会发生n-1次,所以只要一个较小的复杂度完成这n-1次加边即可启发式合并维护并查集,每次暴力修改所有属于小区间的fa值,用vector记录每个连通块内的数,暴力在线段树内修改hash值,复杂度logn,需要进行nlogn次线段树上hash把所有的fa hash起来,然后二分找位置,每次寻找log^2,需要进行On次#include#inclu

2016-05-11 11:05:37 980

原创 bzoj 4568: [Scoi2016]幸运数字

ST表维护线性基,用ST表维护不带修改的东西可以比树剖少一个log。注意维护线性基是60*60的复杂度。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 20010using namespace std;struct yts {

2016-05-11 11:05:15 969

原创 bzoj 4567: [Scoi2016]背单词

读题发现,只要保证每个字符串加入的时候它的后缀都加入了,那么总代价最大是n*(n-1)/2,所以不会出现第一种情况。建出一棵树,每个点的father是它最长的后缀,然后贪心每次走较小的子树就可以。找后缀可以字符串反序从短到长建trie注意在压字符串的时候,字符串大小要开总长度+字符串个数。#include#include#include#include#include#de

2016-05-11 11:04:53 760

原创 bzoj 1419: Red is good

f[i][j]表示有i个R,j个B的期望,然后转移。注意输出多位小数下取整,小数点之后要06lldll ans=floor(f[now][B]*1000000);printf("%lld.%06lld\n",ans/1000000,ans%1000000);#include#include#include#include#include#define ll long

2016-05-10 20:49:51 638

原创 bzoj 4197: [Noi2015]寿司晚宴

看到题,就想到要利用质因子分解进行状压dp,但是质因子太多了,不能直接搞,于是考虑按最大质因子sqrt(n)分别讨论。对于最大质因子>sqrt(n)的每个数,只有一个质因子>sqrt(n),而<sqrt(n)的质因子是可以状压的。f[s1][s2]表示a选的集合恰好为s1,b选的集合恰好为s2的方案数,然后就想不到了。把所有数按照最大质因子分类,每一类分别转移。令dp[0/1][s1]

2016-05-10 20:01:27 929

原创 bzoj 3120: Line

这道题,摆着它40s的时限,隐藏着卡常数的真面目。180个点的矩乘,我默上了板子,却t成狗,加了一些常数优化才过。f[i][a][b][c][j]表示前i列,有a行结尾是011 b行结尾是01 c行结尾是0,出现j列全是男生的方案数转移 f[i][a][b][c][j]*C[c][e]*C[b][d]->f[i+1][d][e][f][j+(f==0)]常数优化:1.不要 ll *

2016-05-10 15:05:01 809

原创 CTSC&&APIO2016 旅游记&&被坑记

在帝都将近十天,回家之际,有一丝急迫,也有一丝眷恋。5.1 CTSC day0        坐前一天晚上的火车,很早就到达了北京,倒了3班地铁+一班公交到达了目的地,被yts大爷领着绕了一个大圈才到宾馆,累成狗。        宾馆很高级,房间里面有70元一瓶的水,冰箱里还有各种饮料(当然是喝不起的啦),床软的可怕。睡了1个小时,人还是虚的,背了一点板子。        中午被叫

2016-05-10 14:57:45 3131 3

原创 bzoj 3176: [Coci 2012]Sort

由于第一次交换长度至少为2,所以进行完第一次交换之后,可以证明之后不再会出现长度为3的递减子段,那么就成了求逆序对、#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 100010using namespace std;int c[

2016-05-10 11:10:20 508

原创 bzoj 4070: [Apio2015]雅加达的摩天楼

分层图最短路,令k=sqrt(n)如果p>k,那么从这个点出发只需要连如果p建有k+1层的分层图,把第0层视为每个位置的源点,对于p最后的建图:第1层到第k层每层都向对应的第0层连边权是0的边每一层相邻的%p相同的点互相连边权是1的边对于每个>k的,从出发点向可以到达的点连距离=跳跃步数的边发现这样内存不够,所以把k设小一点。写错的地方:1.少加了一种边

2016-05-06 16:44:09 1183

原创 bzoj 4553: [Tjoi2016&Heoi2016]序列

令L[i]表示i可以取到的最小值,R[i]表示i可以取到的最大值。如果i可以成为子序列中j的前一项,必须满足 i<j a[i]<=L[j] R[i]<=a[j],然后cdq分治注意分治的写法,不然可能卡成暴力。比较好的办法是把a和L拆成两个东西。#include#include#include#include #define ll long long#define inf 1e

2016-05-06 15:14:42 923

原创 bzoj 4539: [Hnoi2016]树

开始读错题了,以后一定要好好读题!!!称原来给的大小为n的树为模板树,最后得到的树为答案树,把一次操作增加的节点看成一块,然后构成的树称为大树。答案树上两点的距离=两点分别走到所在块的根,在大树上走到两个块的lca,撤销进入块lca后两个点共同走过的路径。第一步的答案就是找到点到它所在块的根在原树中的距离第二步,把大树上两点之间的边权定义为答案树上这两个块的根的距离,然后倍增lca

2016-04-30 11:39:42 667

原创 bzoj 4547: Hdu5171 小奇的集合

读题,发现就是每次找两个最大的数,加入a+b,矩乘优化一下就好。然而,wa*inf,原因如下:1.读错题,答案求的是集合内所有数的和,我写成了所有加入的数的和2.忘记负数取模的问题3.不一定,A#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#defi

2016-04-29 08:38:32 466

原创 bzoj 3609: [Heoi2014]人人尽说江南好

对于必胜方,游戏的最优策略是每次找最大的两个可以合并的数合并,但是如果出现(m-1)  2 1 1 ……的情况合并 m-1 和 2,这样无论必败方如何操作,这次游戏的总操作次数是一定的,因为这样的终局一定是一些m,然后一堆n%m,或者其他总操作次数和它相等的局面。这个终局的总操作次数相当于比没有m的限制少了这剩下的n/m上取整堆的合并次数,所以操作次数是(n-1)-(ceil(n/m)-1)

2016-04-29 08:34:35 710

原创 bzoj 3823: 定情信物

考虑每个n维超立方体的k维元素的“对角线”向量就是从n维中选出k维,每一维为+1或-1,答案就是C(n,k)*2^k,在预处理出逆元之后可以O(n)。但是由于p可以#include#include#define ll long long#define N 10000000using namespace std;ll rev[N];int p;void get_rev(int n){

2016-04-27 21:42:33 521

原创 bzoj 3755: Pty爬山

称关键点为使其改变目标的点,从一个点出发,到达的关键点是确定的,且如果一条路径上到达某个点为关键点,那么之后的路径和从这个点出发的路径相同,所以我们就要找出每个点出发走到的下一个关键点。首先找到每个点能看到的最高的山峰,维护每个点左面的上凸壳,右边的上凸壳,那么它能看到的最高的山峰就是这两个下凸壳的最后一个点中较高的点,而要寻找的关键点一定在这个点和那个较高的点之间。之后,把所有点按照到达

2016-04-27 21:36:59 582

原创 bzoj 4554: [Tjoi2016&Heoi2016]游戏

如果不考虑硬石头的限制,那么就是经典的二分图匹配,对于硬石头的限制,就把同一行/同一列再拆点。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 5010using namespace std;struct yts { int x,

2016-04-26 14:49:32 894

原创 4551: [Tjoi2016&Heoi2016]树

应该是和sdoi发生了同样的一道很好的想法题由于出题人没有想到某种做法变成了水题。这道题显然可以nlog^2n的树链剖分,但是有一种很好的并查集做法:用类似疯狂的馒头这道题的方法,维护father[i]表示离i最近的打了标记的祖先。把所有询问离线下来倒着枚举,如果某个操作是把点从标记变成不标记,那么把它的father变成它的父亲。#include#include#include

2016-04-26 14:07:17 984 2

原创 bzoj 1831: [AHOI2008]逆序对

可以证明在-1的位置填的数是单调不降的。看到数据范围n转移的时候,一个不是-1的位置贡献的逆序对数与它前面的-1的位置具体填了多少有关,所有考虑贡献提前计算,即如果这个位置是-1,把它前面和后面所有不是-1的位置形成的逆序对都计算进去,而不是-1的位置只需要把它和它后面不是-1的位置形成的逆序对计算进去(-1之间不会形成逆序对)。然后,树状数组优化求逆序对即可(但是数据范围好小,直接暴

2016-04-23 18:38:31 559

原创 bzoj 3430: [Usaco2014 Jan]Ski Course Rating

开始别人跟我说这道题时没告诉我对于所有点T的值都是一样的,也没告诉我是奶牛题,于是YY了一种二分答案+可持久化并查集的nlog^3n的做法:把所有边排序,建主席树维护加入的边权之后二分答案,在对应的权值的位置查询它所在的集合大小是否大于等于T然后又想了种nlog^2n的做法:并查集,对每个集合维护一个小根堆记录所有在这个集合内未达到T的点的T-size,然后启发式合

2016-04-23 10:59:12 641

原创 bzoj 2555: SubString

后缀自动机+lct维护fail树注意在copy q节点的信息的时候,right[cpy]=right[q],动态维护其他信息的时候也要注意这一点。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 1200010using na

2016-04-22 09:50:14 551

原创 bzoj 1790: [Ahoi2008]Rectangle 矩形藏宝地

我的这种做法MLE一个点,cheat过去了。把所有点按照x1排序,依次在线段树节点的x2位置加入区间[y1,y2]查询时,查询线段树区间[x2,n]是否存在一个区间包含[y1,y2],在它之前加入的点的x1查询是否存在一个区间包含这个区间:把这些区间去除被别的区间包含的区间,剩下的按照左端点排序,二分找到最大的y1显然,如果这个区间不包含查询的区间,那么其他区间也不可能,维

2016-04-21 21:54:50 766

空空如也

空空如也

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

TA关注的人

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