自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ProLights的博客

Someday, you can program the lights.

  • 博客(400)
  • 收藏
  • 关注

原创 Gym - 100781A Adjoin the Networks 无向图的直径、连通性

题意:给出一个有c个节点e条边的无向图,求添加尽可能少的边使得图连通,并且图的半径(所有点对的最短路径的最大值)尽可能小。无向图的直径先把每个连通块的直径求出来,//这里求直径的方法是 先随机选一个点然后找出距离这个点最远的点,然后选取该点x 作为起点,求距离x最远的点,路径dist[x-y]就是该连通块的直径了。然后如果只有一个连通块,那该直径就是最终的直径如果有2个连通块则,可以把他们的终点连起来如果3个及以上,则先把最大的和第二大的连起来,然后后面的都连到最大的那个连通块的直接中点,并且

2017-07-21 23:55:06 2164

原创 Gym - 101173J Jazz Journey 图论、枚举贪心、Interesting

题意:给出一个图,要求把图上的所有边按照给出的顺序跑一遍,求最小代价。其中有单向边u->v、v->u, 和方程u->v->u、v->u->v,对于u->v->u必须先走u->v再走v->u但中间可以断开,且可以只走第一步u->v,对于v->u->v同理。图论、枚举贪心、Interesting首先由于对于u->v->u这样可以中间断开,即u->v, v -> x, x - y, y -> v, v->u,所以可以直接把一对(u,v)构成的2种单向边按顺序提取出来,map<pair<int, int>, v

2017-07-21 01:16:21 1640

原创 Gym - 101173F Free Figurines 思维题+并查集

题意:给出一个序列ai 表示i的父节点是ai, 再给出一个序列bi 表示i的父节点是 bi,求i < ai, ai为0则表示没有父节点,否则ai都不相等,bi同理。只能进行2个操作,1、 把一个没有父节点的节点 作为 一个 没有父节点和子节点的 节点 的子节点, 代价为 1;2、把一个没有父节点的节点的子节点去掉,代价为1;思维题+并查集关键是正确的读懂2个操作,即可,即只能对free的节点进行操作,所以当ai!=bi时,要先把ai拆掉,但必须先满足ai为free才能把i变成free,同理把i插

2017-07-21 00:55:05 1489 4

原创 Gym - 101174K Balls and Needles DFS+建图+复合判断环

题意:给出三维空间的n条边,每个点都是三维坐标,分别判断三维图有没有环,以及投影到xy坐标平面有没有环。dfs对于三维图只要建图后用dfs跑一遍即可, 注意{u = (x, y, z), v = (x, y, z)}这样的边(点)不能放到图上,对于二维图则在不把{u = (x, y), v = (x, y)}不放到图上之外,每次跑dfs的时候还要用unique去重,//sz = unique(sons[u].begin(), sons[u].end()) - sons[u].begin();因为在跑

2017-07-20 11:22:51 1547

原创 Gym - 101174E Passwords AC自动机+额外的限制条件+状态压缩dp

题意:给出n个由小写字母模式串,用大写字母、小写字母、十进制数字构造的长度为[A, B]的字符串,且满足一下限制条件:1、必须有至少一个大写字母至少一个小写字母和一个数字。2、不包含任一模式串(不区分大小写)。3、对于o、i、e、s、t,在模式串时和0、1、3、5、7不区分。求构造出的满足条件的字符串种数。AC自动机+额外的限制条件+状态压缩dp首先这题的原始版本是 给出n模式串,构造不含任一模式串的长度为m的字符串种类数 http://blog.csdn.net/prolightsfxjh/a

2017-07-20 00:12:47 1978

原创 UESTC 1705 咸鱼钟大爷 随机化+哈希

题意:给出一个p和mod,求出一对哈希冲突的字符串(长度可以不同)随机化+哈希随机生成字符串,然后哈希,然后判断f[hashval]是否出现过,如果出现过就找到了哈希冲突的字符串。如果枚举到MAXN还是没有找到就换一个哈希种子重新找,这里由于oj把ctime禁用了,所以可以每次定义一个变量,然后用这个变量的地址作为哈希种子。关于可以使用随机化的原因,请搜索“生日攻击”百科,里面有详细证明。复杂度 O(n)

2017-07-18 22:12:49 816

原创 UESTC 1709 DNA序列 AC自动机+dp+矩阵快速幂优化

题意:给出m(0<=m<=10)个模式串(0<len<=10),用AGTC构造长度为n的字符串,要求每个串的子串都不出现给定的n个串中的任一个,求满足要求的字符串的个数。AC自动机+dp+矩阵快速幂优化因为构成的最终串是由一个字符一个字符添加到字符串尾部构成的,那么如果一个串的后缀如果恰好是某个给定串的前缀时,这个串就可能最终成为非法串。用k个给定串建立AC自动机,然后从根节点开始递推,dpij表示递推到第j个字符当前在自动机上的i号节点时的方案数,如果下一个节点是k,且不是危险节点,则把dp

2017-07-18 22:11:41 1145

原创 UESTC 1066 Palindromic String manacher

题意:求出前缀的回文重数的和,(回文重数是递归定义的,详见题面)。manacher先用manacher跑出所有的回文子串,并把[i,j]的回文子串半径大小存储在了len[i+j]里,然后从做到右跑一遍,且同时用f[i]表示0~i的回文子串重数,每次if(f[(i+1)/2-1] && len[i] >= i/2+1){ f[i] = f[(i+1)/2-1] + 1; ans += f[i];}else if(len[i] >= i/2+1){ f[i] = 1;

2017-07-18 22:03:48 799

原创 UESTC 1703 一道更简单的字符串题 哈希+枚举

求出最小循环串。哈希+枚举先把字符串哈希,然后从ans = 1 ~ n进行枚举,check的时候枚举每个hash(i, ans) == hash(0, ans),且对于最后一段长度不到ans的 hash(i, len-i) == hash(0, len-i),因为是从小到大枚举,所以一旦有ans满足,则就是答案。这是一个调和级数,故nlin(n)。时间复杂度 O(nlin(n))空间复杂度 O(n)

2017-07-18 21:56:21 1402

原创 UESTC 1696 一道简单的字符串题 KMP+dp

题意:求出所有前缀在字符串中出现次数的和KMP+dpdpi表示前缀s[0,i]在字符串中出现的次数,根据next数组,从n向1跑。u = i;dp[u-1] += 1;if(nxt[u]!=0) mod(dp[nxt[u]-1] += dp[u-1]);ans = sigma{dpi}时间复杂度 O(n)空间复杂度 O(n)

2017-07-18 21:48:38 1441

原创 Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo dp+矩阵快速幂

题意:从(0,0)走到(k,0)(1 ≤ k ≤ 1018),每次可以从(x, y) 走到 (x+1, y+1) 或 (x+1, y) 或 (x+1, y-1),然后必须在很多个y == ci的线段下面走,(相邻的线段,前一个的结束x坐标bi和后一个线段的开始x坐标ai+1 相同,且y = ci可能不同)dp+矩阵快速幂比较裸的dp+矩阵快速幂,因为这里k为1e18,所以几乎只能用矩阵快速幂来做了。朴素的dp,dpij表示走到(i, j)时的方案数,则 状态方程为,if(j+1 <= b[k])

2017-06-26 19:56:39 1305

原创 Codeforces Round #420 (Div. 2) C. Okabe and Boxes 栈+last标记+贪心

题意:有1~n这n个数,给出一个stack的push和pop的序列,要求在执行的过程中用尽可能少的重排次数,使得能够使pop的顺序是1~n的顺序。栈+last标记+贪心1~2*n个操作,用一个last标记最近一次重排的位置,初始为last = 0。然后用一个栈表示上一次重排后push如的元素的栈结构。每次remove,如果当前需要pop的cnt == top则直接从stack pop掉,否则,如果栈空,且mp[cnt]出现的位置在last之前,则可以直接pop, 不然则需要一

2017-06-26 19:38:08 878

原创 计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 F 腾讯消消乐 状态压缩dp、枚举+剪枝

题意:给出一个长度为n 的序列n(1≤n≤18),每次如果对于区间[L,R],如果gcd([L,R]里的元素) >= k(1≤k≤min{ai})则可以一次性删除,然后剩下的数会合并成为一个连续区间,定义 f(i) 为进行 i 次操作将整个序列删完的方案数。求sigma{f(i)∗i} mod 1000000007。状态压缩dp、枚举+剪枝这里n只有18,2^18 == 262144故可以想到用状态压缩dp来做,dp[i][j]表示已经进行了i次删除操作,且当前的序列状态为j,j的第i个二进制位如果是

2017-06-11 19:12:48 1425

原创 计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 D 百度地图导航 最短路、Dijkstra的拓展

题意:有 n 个点,编号依次为 1 到 n,且有若干个点的集合,编号依次为 1 到 m。每个点集合包含一个或多个点;每个点可能属于多个点集合,也可能不属于任何点集合。图中中有两种边。第一类边是点u,v 之间权值为ci的无向边;第二类边是点集合之间的无向边,连接两个点集合 a,b,通过这条边,城市群 a 里的每个点与点集合 b 里的每个点之间有一条权值为 w 的无向边。求从点s 到点 t 的最短路。最短路、Dijkstra的拓展这里n+m是4e4所以很可能只能用O(nlogn)的算法,所以可以用Dijk

2017-06-11 18:49:50 868

原创 计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 B Windows 画图 几何、平面、枚举

题意:在一个m*m(1≤n≤80000,1≤m≤250)的平面内给出n条线段,然后给出q(1≤q≤62500)个询问,为点x,y最近被2条线段所经过,如果没有则输出0。几何、平面、枚举这里 8e4 * 250 == 2e7,刚好可以预处理出mp[x][y]表示最后一次经过的线段。然后注意下精度问题即可,可能是向上修复精度,也可能是向下修复精度。y = -1;if(fabs(k*(j-xa) + ya*1.0 - double(int(k*(j-xa) + ya*1.0))) < EPS) y =

2017-06-11 18:27:32 912

原创 UESTC 1692 这是一道比CCCC简单题更有想象力的中档题 完全背包

完全背包dp[i][j][k],已经考虑了前i个队员,写了j行代码,存在k个Bug的方案数,通过递推顺序,第一维可以直接省略if (k>=arr[i]) dp[j][k]=(dp[j][k]+dp[j-1][k-arr[i]])%mod; //这行代码的实际含义是dp[i][j][k]=(dp[i-1][j][k]+dp[i][j-1][k-arr[i]]),思考清楚为什么是这样的,尤其是为什么等式右边先是i-1,后面是i?//转移方程似乎没有体现出一个队员可以写多份代码?提醒:这里的递推顺序

2017-06-11 18:08:34 891

原创 UESTC 1691 这是一道比CCCC简单题经典的中档题 多重背包

多重背包转化成0-1背包来跑。for(i = 1; i <= n; i++){ for(k = 0; k <= c[i]; k++){ for(j = w; j >= 0; j--){ if(j - k*need[i] >= 0) dp[i][j] = max(dp[i][j], dp[i-1][j-k*need[i]] + k*value[i]); else break; } } for(j = 0

2017-06-11 17:31:31 726

原创 UESTC 1690 这是一道比CCCC简单题难的简单题 状态压缩dp

状态压缩dp经典例题hihoCoder 1048 : 状态压缩·二这里有更好的讲解。时间复杂度 O(n*m*(1<<m))空间复杂度 O(2*(1<<m))

2017-06-11 17:24:05 865

原创 UESTC 1606 难喝的饮料 0-1背包+完全背包

0-1背包+完全背包通过递推顺序,第一维可以直接省略for(i = 1; i <= n; i++){ if(c[i]){//0-1背包 for(j = w; j >= 0; j--){ if(j - need[i] >= 0) dp[j] = max(dp[j], dp[j-need[i]] + value[i]); else break; } } else{//完全背包 for(j =

2017-06-11 17:07:47 1082

原创 UESTC 1607 大学生足球联赛 构造、蛇形安排赛程表

构造法:蛇形安排赛程表将1-N排成两竖列,每一轮同一行的为对手保持1的位置不变,其他位置按顺(逆)时方向依次旋转1 6 1 2 1 3 1 4 1 5 2 5 3 6 4 2 5 3 6 4 3 4 4 5 5 6

2017-06-11 16:47:18 1383

原创 Opencup 010352 Problem 5. Autocomplete 哈希+bitset

题意:定义2个字符串如果忽略大小写则完全相同,如果区分大小写则只有不大于k个位置不同,则认为这2个字符串是“相似的”。给出w个(1<=w<=1000)个长度小于2000的模式串,然后q次询问(1<=q<=1000),每次输入一个长度小于2000的字符串问在那n个模式串中有多少个与其互为“相似的”。哈希+bitset这里2e6*(26+26)的复杂度,所以AC自动机基本上直接用不上了,如果只存小写,则虽然勉强够内存,但其实还是很可能会MLE的,并且也解决不了问题。所以想到用哈希,首先对于每个模式串在不

2017-05-30 20:27:45 1307

原创 UESTC 1646 穷且益坚, 不坠青云之志。 差分约束、Fellman-ford

题意:求一个有n个元素的数列,满足任意连续p个数的和不小于s,任意连续q个数的和不大于t。差分约束、Fellman-ford令sum[i]表示前i项的和(0<=i<=n,sum[0]=0)那么题目的条件可转化为:sum[i]-sum[i-p]>=s (p<=i<=n)sum[i]-sum[i-q]<=t (q<=i<=n)将第一个不等式取反,得到sum[i-p]-sum[i]<=-s(p<=i<=n)于是问题转化为求一系列不等式的解,这是一个典型的差分约束问题。考虑最短路径的性质,令dis

2017-05-28 17:05:33 1116

原创 UESTC 1642 老当益壮, 宁移白首之心? 欧拉回路、Fleury算法

题意:构造一个01串,使其满足以下条件:环状(即首尾相连)每一位取值为0或1长度是2^n对于每个(2^n个)位置,从其开始沿逆时针方向的连续的n位01串(包括自己)构成的数均不相同,即0到(2^n) - 1中的数各出现一次欧拉回路、Fleury算法考虑用一条边表示一个数,那么题目要求就是无重复的遍历完所有边,则这是一个欧拉图的问题。对于有公共点的两条边,第一个的后n-1位和第二个的前n-1相同。这样将一条边的前n-1位和后n-1位作为点,连边,这样来表示它。如:对于01101,我们可以

2017-05-28 16:48:30 1247

原创 UESTC 1641 此情无计可消除,才下眉头,却上心头。 最小生成树、Kruskal

题意:有一个长度为n的未知的01序列,询问区间[l,r](1<=l<=r<=n)的异或和代价为C[l][r],求通过询问得到该序列的最小代价.最小生成树、Kruskal建立n+1个虚拟点0到n,对于询问区间[l,r],在l-1与r之间连边,边权为C[l][r],那么能得到该序列的极小询问集合会构成这n+1个点的一个生成树,代价为边权和。证明(?):要得到n个位置的值,至少要询问n次若询问集合构成的图存在回路那么该回路对应的询问子集中任意一个询问的结果都可以由其它询问得到。故询问集合构成的图

2017-05-28 16:15:54 1115

原创 UESTC 1639 云中谁寄锦书来?雁字回时,月满西楼。 Dijkstra拓展

题意:在n个点m条边的无向图上,有k个出口从起点出发,每到一个点(包括起点),该点连出的边中有d条会被封锁,求最坏情况下到达出口的最短路。Dijkstra拓展由于求最坏情况下的最短路,对于每个点,显然最优的前d条边不能走。对于边u->v,必然要先得到v到出口的最坏情况下的最短路才能得到u经过该边再到出口的最坏情况下的最短路,也就是该边对于u的价值,所以要从出口往回考虑。令f[i]表示i到出口的最坏情况下的最短路,同dijkstra算法一样,每个点i可以分为f[i]已确定的和f[i]未确定的初始

2017-05-28 15:55:13 1152

原创 UESTC 1635 琵琶弦上说相思,当时明月在,曾照彩云归 拓扑排序、bfs

题意:给出n个仅由小写字母组成的字符串,要求找出一种字典序,使得这n个字符串在这种字典序下是从小到大排列的。拓扑排序、bfs对于相邻的2个字符串当第一次遇到不相等的字符是前一个u必定比比后一个v小,所以可以u向v连一条有向边。然后对于建出的这个图,跑一次拓扑排序即可。时间复杂度 O(n*length)空间复杂度 O(n*length)

2017-05-28 15:46:59 1249

原创 UESTC 1634 记得小苹初见,两重心字罗衣 欧拉路径(回路)

题意:二维平面上有n个点,需要将每个点染成红色或蓝色.要求设计一种染色方案能够使得每一行和每一列的红色的点的数量与蓝色的点的数量之差都不超过1。欧拉路径(回路)把每个点当作一条边来处理,横坐标x表示一个点,纵坐标y加MAXN以后也表示一个点,边x-y+MAXN就唯一确定了这个坐标。然后对这个图,如果有度数为奇数的点,则新建节点a和b,如果是表示横坐标的点度数为奇数,则向a连边,如果是纵坐标就向b连边。然后if(adj[i].size())则跑Fleury算法。这个要写成inline void

2017-05-28 15:24:01 1602

原创 UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造

给出一个大小为n的集合S,集合里有n个互不相同正整数.有q个询问,每次询问是否能选择S中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为m.Dijkstra+构造对于S集合中的数,例如a1,考虑到如果x能够被表示出来,那么x+a1也一定能被表示出来。故设d[r]为所有模a1余r的数中,能被表示出来的最小的数。故可以表示出一个a1个节点a1*n条边的有向图。d[0] = 0,丢入priority_queue<ii, vector<ii>, greater<ii>>

2017-05-28 15:10:59 1677

原创 UESTC 1636 梦后楼台高锁,酒醒帘幕低垂 最小生成树Kruskal算法的扩展

题意:给出一个有n个点和m条边的无向连通图,每条边都有一个权值w.定义,对于一条路径,它的Charm value为该路径上所有边的权值的最大值与最小值的差.询问从1到n的所有路径的Charm value的最小值.最小生成树Kruskal算法的扩展首先把边按照边权排序,然后对于每个i,向后枚举,并把边加入连通块,当1和n属于同一个连通块时刷新ans,并接着枚举下一个i。时间复杂度 O(mlogm)空间复杂度 O(m)

2017-05-28 15:01:09 1609 4

原创 HDU - 2825 Wireless Password AC自动机+状压dp

题意:给出一个字符串集合,集合里包含m(m <= 10)个长度不大于10的字符串,要求构造长度为n(1<=n<=25)的字符串且子串中至少出现k个集合里的字符串,求方案数 MOD 20090717。AC自动机+状压dpAC自动机上统计类的dp问题,dpijs表示在处理主串第i个字符遍历到了AC自动机上的j号节点s且当前构造成的字符串中包含的集合信息s时的方案数。这里的s是一个长度为10的二进制数(表现形式为32位的带符号),第i位为1则表示构造出的字符串中包含了给定集合中的第i个字符串。若dpijs

2017-05-18 21:35:02 1174

原创 UESTC 1601 艾尔大停电2 二维树状数组+区间更新

题意:每次对一个矩形更新操作,单点查询,求该点被更新的次数。二维树状数组+区间更新用二维树状数组, get(x, y)表示 1,1到x,y这个矩形的面积或者说矩阵的元素和,所以对于读入的每个x1,y1,x2,y2。可以在 (x1, y1)这里插入一个1,然后为了抵消影响在(x2+1, y2+1)插入一个 -1,在(x2+1, y1)和(x1, y2+1)也插入一个-1,这就是树状数组区间更新的常用做法,推广到二维也是一样。这里如果查询x > x2+1, y > y2+1,的时候会有 k个1和3

2017-05-16 19:46:05 1516

原创 UESTC 1600 艾尔大停电 线段树+扫描线、矩形面积并、浮点数的离散化

题意:在一个二维平面上给出n个矩形,求这些矩形的总覆盖面积。线段树+扫描线、矩形面积并、浮点数的离散化线段树+扫描线的经典例题,这里就不重复描述了。请注意浮点数的离散化,用unique会有一定的误差,所以建议用最朴素的方法进行离散化。线段树每个节点维护的是一个区间[x, x+1]而不是一个区间端点。复杂度 O(nlogn)

2017-05-16 19:42:27 2055

原创 UESTC 1586 可以说是非常豹笑了 2-SAT+并查集

题意:n个数,m个关系,每个关系表示T==1则a、b两数相同,T == 0则a、b两数不同。要求判断关系是否没有矛盾。2-SAT+并查集有一个大小为2*n的并查集,如果a、b天相同,则把a和b,以及a+n和b+n,合并,如果a、b天不同,则把a和b+n,以及a+n和b,合并,然后i= 1 ~ n,扫一遍,如果 a和a+n在同一颗树中,则相矛盾,因为不可能那天表情即一样又不一样,答案为NO,反正为 YES复杂度 O(2*n)

2017-05-16 19:38:06 1799

原创 UESTC 1595 老司机的毒奶 贪心+二叉树+优先队列

题意:给出n个不同的数,每个数可以最多进行ki次操作,每次操作 ai/2。每次操作后n个数必须互不相等。求max{ai}(1<=i<=n)的最小值。贪心+二叉树+优先队列ai的k次ai/2的操作,刚好像是在二叉树上走,也就是这n个数可以丢到一个二叉树里,每次把编号最大的节点,往根的方向走,需找一个没有被标记过的节点,找到最近的一个可行节点则本次操作成功,继续处理新的最大值。故把所有暂时存在的数用map<int, bool> mp标记,且把所有的数丢到优先队列里,每次取出最大的,判断是否存在k,

2017-05-16 19:33:35 927

原创 UESTC 1594 老司机的奇幻漂流 并查集+食物链

题意:三个东西构成一个食物链关系,A->B, B->C, C->A,给出m条关系,问是否有矛盾。并查集 食物链每个点有三个成员A、B、C,当X和Y是同类时, _merge(X, Y), _merge(X+n, Y+n), _merge(X+2*n, Y+2*n);当X攻击Y时, _merge(X+n, Y), _merge(X+2*n, Y+n), _merge(X, Y+2*n);每次判断是否 if(x > n || x < 1 || y > n || y < 1){

2017-05-16 19:28:49 962

原创 UESTC 1593 老司机破阵 优先队列+双端链表

优先队列+双端链表cf原题,直接贴的以前的代码反向做,按着反的顺序把元素一个一个的添加进去,用priority_queue 维护当前最值,用双向链表维护当前区间的状态,L[i]表示以i为端点的区间的区间左端点,R[i]表示以i为区间端点的右端点。对于每个点 j, 当只R[i + 1] != 0 时, 右边有区间,可以把两个链表合并成一个, R[i] = R[i + 1], L[i] = i;当只L[i - 1] != 0 时, 左边有区间,可以把两个链表合并成一个, R[L[i - 1]]

2017-05-16 19:24:13 953

原创 UESTC 1599 wtmsb 优先队列(最小值优先)

题意:有n个数,每次可以选择2个数x和y进行合并,其代价和结果都是x+y,要求n-1次合并的最小代价。优先队列(最小值优先)把所有的数丢进优先队列,然后每次如果队列里的元素个数>= 2,则取出2个数合并记录然后把和丢回队列,直到元素个数为1.复杂度 O(nlogn)

2017-05-16 19:19:10 1246

原创 UESTC 1603 BanG Dreamer 小根堆、贪心+set<pair<int, int>>+low_bound

题意:给出一个序列,要求划分成尽可能少的堆序列。一个序列S={s1,s2,...,sn}S={s1,s2,...,sn}是一个“堆型序列”当且仅当,存在一个有nn个结点的二叉树,其每个结点与该序列的元素一一对应,而且对于该二叉树的每个非根结点sisi和它的父节点sjsj,满足sj≤sisj≤si并且j<ij<i。子序列的定义是,其是某个序列删除掉任意数量元素之后,所剩下的部分。并且不改变其原有的顺序。小根堆、贪心+set<pair<int, int>>+low_bound用set维护,set中存储

2017-05-16 19:14:21 813

原创 UESTC 1581 Rikka的烦恼 分块、线段树

题意:给出一个序列,询问某一段下标是等差数列的子序列的最大值。每次询问给出首项和公差。每次单点修改。分块、线段树由于 7e4*7e4 == 4.9e9,所以如果除以10的话,4.9e8,大致可以满足1ms == 1e9次运算,所以设定一个阈值,公比大于k的时候,直接算出最大值,公比小于k的时候用O(k^2)棵线段树维护,tree[i-1][j]表示以i为公比j为首项的线段树。所以先预处理出线段树,然后每次询问根据k的不同,分别直接处理或者用线段树维护。复杂度 O(n^2/k)

2017-05-16 18:59:31 879

原创 UESTC 1598 加帕里公园的friends 线段树区间合并

题意:单点更新,区间查询最大子区间和。线段树区间合并每个节点维护四元组int sum[4*MAXN], suml[4*MAXN], sumr[4*MAXN], ans[4*MAXN];sum[Ind]表示该区间的和,suml[Ind]描述该区间从左端点开始的最大连续和,sumr[Ind]表示从该区间右端点结束的最大连续和,ans[Ind]表示该区间的最大子区间和。每次pushup的时候,刷新这四元组,ans[Ind] = max(max(ans[Ind<<1], ans[Ind<<1|1]),

2017-05-16 18:50:53 912

空空如也

空空如也

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

TA关注的人

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