STL
_beginend
这个作者很懒,什么都没留下…
展开
-
【2019 CCPC 哈尔滨站 G. Game Store】【Nim-K+线性基+bitset优化三进制加法】
题意题目链接有一个商店,商店里每天会增加一个石子集合,集合里有两堆石子数相同的石子,且每个集合有一个价格。Alice每天会在商店里选价格和尽量大的一些集合,满足把这些集合里的石子堆放在一起,然后Bob任意拿掉一些石子堆,无论Bob怎么拿,玩Nim-K游戏先手总有必胜策略。n≤500000,ai≤1018n\le500000,a_i\le 10^{18}n≤500000,ai≤1018,强制...原创 2019-11-12 16:05:44 · 550 阅读 · 0 评论 -
bzoj 5045: 打砖块 set
题意小Q最近沉迷于一款新型《打砖块》游戏。在每局游戏中,呈现在屏幕上的是一堵无限大小的墙壁。墙壁上镶嵌着无数长度为2、宽度为1的砖块。墙壁被分成若干行,每行宽度都为1,相邻两个格子形成一个砖块。相邻两行的砖块是间隔摆放的。墙壁从下往上行编号递增,从左往右列编号递增。如下图所示: 在游戏的一开始,有n块砖块消失了。如果两块在同一行且相邻的砖块都消失了,那么玩家可以移除它们上方与它们都相邻的那一个原创 2017-09-23 07:17:43 · 302 阅读 · 0 评论 -
51nod 1323 完美平方 线性基+bitset+数学
题意有一个N*N的矩阵M,其中包含N*N正整数。现在要从这个矩阵中选出一些元素来,要求: 1)每行恰好选择了奇数个元素; 2)每列恰好选择了奇数个元素; 3)选出的所有元素的乘积是个完全平方数; 4)每个元素不能重复选择,即你不能选择M(i,j)多次。 问有多少种不同的选取方法。输出方法数mod 1,000,000,007后的答案。 1<=N<=20,1<=M[i][j]<=1,000,原创 2017-11-05 07:44:41 · 542 阅读 · 0 评论 -
bzoj 5097: 实时导航 bfs+bitset
题意告别了随机的国度,这回小Q来到了一个陌生的国度。这个国度由n座城市和若干条单向道路构成,城市依次编号为1到n。这个国度的路况变化非常频繁,而充满好奇的小Q想在这里进行许多次旅行,在每次出发之前,他会使用导航系统计算两点间最少需要多少时间。请写一个程序,帮助小Q计算两点间的最短路,你需要支持以下两种操作: C x y z 从x点出发到y结束的单向道路通过时间变为了z(1<=z<=4),z=0表示原创 2017-12-20 20:04:14 · 330 阅读 · 0 评论 -
AtCoder Grand Contest 014 E - Blue and Red Tree 乱搞
题意一棵n个节点的树可以按如下方式构造一棵新树:选择一条简单路(s,t),把原图中在该路径上的某条边删掉,然后在新图中加入s到t的边。给出两棵树,问第一棵树是否存在一种构造方案来得到第二棵树。 n分析大概想到了做法,但是没有想到要怎么实现。 这题可以倒着想,在原图中最后删掉的边,在新图中也一定是以同样的方式出现。 那么我们可以看成一开始原图中有n个点连通块,每次找一条在原图和原创 2018-01-29 22:25:27 · 481 阅读 · 0 评论 -
Codeforces 650E Clockwork Bomb 并查集+set
题意给你两棵大小为n的树,每次操作可以把第一棵树的一条边删掉然后加上另一条边,且满足操作完之后仍是一棵树。问最少需要多少步操作才能把第一棵树变成第二棵树并输出方案。 n<=500000分析如果我们每次随便选一条在第二棵树中出现但不在第一棵树中出现的边,设为(x,y),那么第一棵树中x到y路径上必然存在一条边满足其只在第一棵树中出现。 很自然的想法就是去维护这个东西,然后我...原创 2018-02-26 16:21:26 · 335 阅读 · 0 评论 -
bzoj 5245: [Fjwc2018]欧拉函数 线段树套bitset
题意对于正整数 n,定义欧拉函数 φ(n) 为小于等于 n 且与 n 互质的正整数个数。例如 φ(1) = 1, φ(8) = 4。 给定正整数序列 a1, a2, · · · , an,请依次执行 q 个操作,操作有以下三种类型: 0 i x:修改 ai 的值为 x; 1 l r:查询 φ(al + al+1 + · · · + ar) 的值,输出这个值对 10^9 + 7 取模...原创 2018-03-31 08:18:58 · 611 阅读 · 0 评论 -
bzoj 4919: [Lydsy1706月赛]大根堆 set启发式合并
题意给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。 1<=n<=200000分析比赛的时候打了sp...原创 2018-03-28 14:53:37 · 532 阅读 · 0 评论 -
LibreOJ #6041.「雅礼集训 2017 Day7」事情的相似度 后缀自动机+set启发式合并+扫面线+树状数组
题意给一个长度为n的01串,每次询问给出一个区间[l,r],问所有结束位置在[l,r]中的前缀,两两lcs的最大值是多少。 n,m≤105n,m≤105n,m\le10^5分析显然一个前缀对(x,y)能贡献到所有满足l≤x,y≤rl≤x,y≤rl\le x,y\le r的询问[l,r][l,r][l,r]。 两个前缀的lcs等价于其在sam的parents树上lca的mx。那么...原创 2018-05-08 14:40:48 · 513 阅读 · 0 评论 -
bzoj 4939: [Ynoi2016]掉进兔子洞 莫队算法+bitset
题意有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2 个 3。 n , m <= 100000 , 1 &...原创 2018-08-26 10:41:55 · 376 阅读 · 1 评论 -
hdu 6072 Logical Chain Kozaraju+bitset
题意有一张n个节点的有向图,m组操作,每次最多翻转K条边,求每组操作后可以相互到达的点的对数。n≤250,m≤25000,k≤10n\le250,m\le25000,k\le10n≤250,m≤25000,k≤10分析只要求出每个强连通分量的大小就可以知道答案了。用tarjan来做的时间复杂度是O(n2m)O(n^2m)O(n2m),显然跑不过。如果用Kozaraju的话,可以用bit...原创 2019-07-05 10:48:31 · 161 阅读 · 0 评论 -
bzoj 4484: [Jsoi2015]最小表示 拓扑排序+bitset
题意对于一个N个点(每个点从1到N编号),M条边的有向图,JYY发现,如果从图中删去一些边,那么原图的连通性会发生改变;而也有一些边,删去之后图的连通性并不会发生改变。JYY想知道,如果想要使得原图任意两点的连通性保持不变,我们最多能删掉多少条边呢?为了简化一下大家的工作量,这次JYY保证他给定的有向图一定是一个有向无环图 n<=30000,m<=100000分析如果我们单分析一条边在什么情况下会原创 2017-07-27 20:42:20 · 344 阅读 · 0 评论 -
bzoj 4777: [Usaco2017 Open]Switch Grass 线段树+最小生成树+set
题意给定一张带权无向图,每个点有一个颜色,每次改变一个点的颜色,要求你在操作后输出这个图中最近异色点对之间的距离最近异色点对定义为:一对点颜色不同,且距离最小。 n,m,q<=200000分析有两个很重要的结论: 1、答案只可能是一条边。 2、答案必然在最小生成树上。 证明的话自己yy一下就好了。 我们可以先求出最小生成树,然后对于每个节点开一棵以颜色为下标的线段树,储存的是其所有子节点到原创 2017-06-01 20:57:48 · 743 阅读 · 0 评论 -
bzoj 2208: [Jsoi2010]连通数 拓扑排序+强连通分量+bitset
题意给出一个有向图,求有多少个点对(i,j)满足i可以到达j(i可以等于j)分析这题据说暴力也能卡过去,毕竟20s的时限我才跑了1s+,但打暴力的话就没意思了,所以就果断码了一波正解。 这题一开始也有一点大概的思路也就是用bitset之类的状态压缩来搞一搞,但是没想到用tarjan来缩点。 那么正解其实就是先用tarjan来缩一下点,那么每个强连通分量对ans的贡献就是size*size,然后拓原创 2016-10-19 21:16:30 · 640 阅读 · 0 评论 -
bzoj 1150: [CTSC2007]数据备份Backup 贪心+优先队列
题意有n栋楼排成一排,要求在k对楼之间连接电缆,每栋楼只能被连接一次,求最小的∑|dis[x]−dis[y]|\sum |dis[x]-dis[y]|.x,y分别为电缆的两个端点。 n<=100000分析显然k对电缆连接的必然都是相邻的两栋楼,那么问题可以转换成有n-1个数,a[i]=dis[i+1]-dis[i],从中取出k个数满足其互不相邻且和最小。 那么就可以用贪心来做。每次找一个最小的,原创 2016-11-28 21:16:22 · 345 阅读 · 0 评论 -
bzoj 2288: 【POJ Challenge】生日礼物 贪心+优先队列
题意给出一个长度为n的数列,要求从中取出不超过m段连续的数,使其和最大。 n<=100000分析之前看黄学长的blog说可以转换成数据备份,但却没有思路,看了题解后才恍然大悟。这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉。 有一种想法就是把所有的正值都加起来,然后把所有数的绝对值加进优先队列,每次去一个最小的出来然后减掉,最后的即为答案。 为什么是正确原创 2016-11-29 21:52:20 · 915 阅读 · 0 评论 -
bzoj 3357: [Usaco2004]等差数列 动态规划
题意给出n(1M-n<=2000)个数ai(0<=ai<=10^9),求最长的等差数列长度。分析我用的是nlogn的方法写的,勉强水了过去,顺便学习了已发map的用法。 f[i,j]表示结尾为ai倒数第二个数为j时的最大长度。 f[i,a[j]]=max(f[j,a[j]*2-a[i]],f[i,a[j]],2)正解其实就是f[i,j]表示最后一个数是aj倒数第二个数是ai时的最大长度,每处理完原创 2016-10-21 20:41:20 · 624 阅读 · 0 评论 -
bzoj 2151: 种树 贪心+优先队列
题意有围成一圈的n个位置,每一个位置有一个权值,现要求选出m个位置,使得这m个位置互不相邻且权值和最大。 n<=200000分析如果没有m这个限制的话我可能就会跑去写网络流了……我们考虑如果没有互不相邻这个限制的话要怎么做,很显然就是直接用优先队列取出前m大的即可。 但加上这个限制呢?我们考虑还是这样来做,那么取出一个最大的,假设下标为x,那么x+1和x-1一起选的话有可能是比选x要优的。但可以原创 2016-11-28 20:07:10 · 613 阅读 · 0 评论 -
bzoj 2802: [Poi2012]Warehouse Store 贪心+优先队列
题意有一家专卖一种商品的店,考虑连续的n天。 第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他。 如果要满足顾客的需求,就必须要有足够的库存。问最多能够满足多少个顾客的需求。 n<=250,000分析一开始的想法是,f[i]表示第i天剩下的钱,把所有顾客排序后,每次选花费最小的顾客x,看是否能满足,若能满足则选并把f[x+1..n]减去花费原创 2016-12-15 21:31:04 · 394 阅读 · 0 评论 -
bzoj 3991: [SDOI2015]寻宝游戏 dfs序+虚树+set
题意给出一棵树,每次操作会把一个点放入宝藏或把宝藏拿走,每次操作完后问从任意一个点开始遍历所有宝藏点最后回到起点的最短路径。 n,m<=100000分析一开始想到树剖上面去了。。。其实那个距离就是虚树中任意两点间的距离和*2 同时等于把虚树所有点按照dfs序排好之后相邻两点的距离和加上起点到终点的距离和。 用一个set暴力维护即可。代码#include<iostream>#include<c原创 2017-03-28 21:19:15 · 362 阅读 · 0 评论 -
bzoj 2006: [NOI2010]超级钢琴 可持久化线段树+优先队列
题意小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音原创 2017-04-10 15:16:10 · 399 阅读 · 0 评论 -
hackerrank DAG Queries 定期重构+bitset
题意给出一个有向无环图,一开始每个节点为0,要求资瓷三个操作: 1 u x表示将u可以到达的节点权值变为x 2 u x表示将u可以到的的节点y的权值变为min(val[y],x) 3 u表示询问u的权值。 n,m,q<=100000分析对于操作1我们可以考虑定期重构,但我们需要很快的询问两个节点间是否可以到达,那么就可以用bitset来完成。注意到bitset空间会爆炸,于是就要把节点按序号原创 2017-03-30 21:53:01 · 644 阅读 · 0 评论 -
bzoj 4810: [Ynoi2017]由乃的玉米田 莫队算法+bitset
题意给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3选出的这两个数可以是同一个位置的数 定义c为每次的x和ai中的最大值,ai >= 0,每次的x>=2,n,m,c <= 100000分析考虑莫队,维护一个桶和两个bitset,一个原创 2017-04-12 13:31:34 · 358 阅读 · 0 评论 -
bzoj 4881: [Lydsy2017年5月月赛]线段游戏 树状数组+set
题意给出一个n的排列,求将该排列划分成两部分,使得其分别为上升序列的方案有多少种。答案模998244353. n<=100000分析一开始yy出了一个dp方程,看形式应该是可以用数据结构来优化的。 实际上有更简单的方法。 首先把无解的情况判掉。若最长下降子序列大于2的无解。 我们可以在两两逆序对之间连边,那么答案就是2^联通块数量。 对于每个连通块,我们将其最大的元素仍到set里面。每加入原创 2017-05-19 11:46:45 · 375 阅读 · 0 评论