随笔分类 -  题解

上一页 1 2 3 4 5 6 7 8 9 10 ··· 18 下一页
摘要:传送门 解题思路 乍一看像是构造题。 我们从简单开始想。 当有一个2*2的方格,很显然可以直接铺上。 于是我们发现,当一个矩形的1/4已经铺好后,剩下的也可以铺。 就像下图一样:(图片来源:洛谷网校) 突破点:在已经铺好的1/4的矩形正对着的位置铺一个。 就像这样: 所以可以分治处理,判断已经填好的 阅读全文
posted @ 2021-09-22 09:59 尹昱钦 阅读(89) 评论(0) 推荐(0)
摘要:传送门 解题思路 前置知识:错排问题 令 \(f(i)\) 表示 \(i\) 个元素的错排数。则: \(Ans=C_n^m\times f(n-m)\) 组合数用维护前缀和+逆元求得,错排提前预处理。 AC代码 #include<cstdio> #include<iostream> #include 阅读全文
posted @ 2021-09-18 19:31 尹昱钦 阅读(77) 评论(0) 推荐(0)
摘要:传送门 解题思路 分别从a、b、c三个点求单源最短路。 然后枚举两条道路相交的节点(i,j),因为是点权,所以答案为 \(dis[0][i][j]+dis[1][i][j]+dis[2][i][j]+e[i][j]\)。 注意用set进行的堆优化,要防止set丢失元素,所以要对pair的第二维(存点 阅读全文
posted @ 2021-09-17 20:27 尹昱钦 阅读(137) 评论(0) 推荐(0)
摘要:传送门 解题思路 这题考察的实际上是对Floyd的深入了解。 我们知道,Floyd求最短路是先枚举中间点k,在枚举起点终点i和j,代表的意义实际上是从i点到j点只允许经过前k个点的最短路。 在回到这个题,T秒前只允许经过T秒前重建完的村庄,完全符合Floyd的思想。 所以做法就是T不断往后推进,然后 阅读全文
posted @ 2021-09-17 14:43 尹昱钦 阅读(76) 评论(0) 推荐(0)
摘要:传送门 解题思路 水题一个。 数据范围可以Floyd水过去。 但是苏轼告诉我们: 守其初心,始终不变。 屈原告诉我们: 虽九死其犹未悔。 所以我用了O(n+m)的搜索。 其实这叫做双端队列广搜,碰到边权为0放到队列首,边权为1放到队列尾。 但我没学过,就用了dfs+bfs结合体水过去了。 AC代码 阅读全文
posted @ 2021-09-17 08:30 尹昱钦 阅读(66) 评论(0) 推荐(0)
摘要:传送门 解题思路 调了一晚上。。紫题果然不是我现在能做的。。 首先考虑如何把多个deep的和转化成可以快速求出来的东西: 我们可以对于每个[l,r],把每个点到根节点的路径上的点权++(初始为0),这样对于每个询问(l,r,z),答案即为z到根节点的路径上的点权和。 操作1 但是对于每个询问都操作一 阅读全文
posted @ 2021-09-17 08:04 尹昱钦 阅读(36) 评论(0) 推荐(0)
摘要:传送门 解题思路 和这个题几乎一样。 这里是开方,比取模进行次数更少。次数k大约为 \(log_2(log_2n)\)。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algor 阅读全文
posted @ 2021-09-16 18:42 尹昱钦 阅读(38) 评论(0) 推荐(0)
摘要:传送门 解题思路 直接用线段树维护取模是不好维护的。 而且我们发现一个数x最多取模logx次(每次大小减半),所以可以暴力取模。 维护的信息除了区间和,还有区间最大值,因为当区间最大值<模数时,此操作是无效的。 AC代码 #include<iostream> #include<cstdio> #in 阅读全文
posted @ 2021-09-16 18:25 尹昱钦 阅读(46) 评论(0) 推荐(0)
摘要:传送门 解题思路 其实很板子。 但是我因为一开始写麻烦了又懒得修改所以出现了bug调了一节课。。。 线段树里存区间max,lmax,rmax,sum,意义跟变量名一样。 深刻体会到了pushup里采用取地址符调用的重要性。 AC代码 #include<iostream> #include<cstdi 阅读全文
posted @ 2021-09-16 17:23 尹昱钦 阅读(46) 评论(0) 推荐(0)
摘要:传送门 解题思路 逆序对升级版。 考虑每个逆序对对答案的贡献为多少。 假设这个逆序对的坐标为(i,j),则显然有i*(n-j+1)个区间包含这个逆序对,所以对答案的贡献就是i*(n-j+1)。 和以前一样用树状数组求逆序对,需要改动的地方是新加的节点不再是+1,而是+i。 估计ans最大可能在n^4 阅读全文
posted @ 2021-09-16 15:35 尹昱钦 阅读(153) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先很显然的一种O(nlogn)做法是st表:st[i][j][0/1/2]分别存从i开始向上走2^j步到达的节点编号/有没有H奶牛/有没有G奶牛。 代码量比较复杂。 还有一种很巧妙的做法是用top[i]表示i号点的奶牛种类从i向上最高可以到达的位置。 很显然假设读入询问的为x,y 阅读全文
posted @ 2021-09-16 14:56 尹昱钦 阅读(50) 评论(0) 推荐(0)
摘要:传送门 解题思路 每次删边复杂度太高,所以可以倒序加边。 注意在对方占领后,这个点就不参与连通块数量的计算了。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> 阅读全文
posted @ 2021-09-16 11:10 尹昱钦 阅读(54) 评论(0) 推荐(0)
摘要:传送门 解题思路 注意有个条件为ai互不相同。 尝试应用lxl教的套路: 第一步,将一维问题放到二维平面上:把好的配对(x,y)看做二维平面上的点。于是问题就变成了求出矩形所包含的点的个数。 第二步,利用数据结构将二维平面问题降到一维解决:离线,把询问按照右端点排序,同时把好的配对按照右端点排序,保 阅读全文
posted @ 2021-09-15 20:06 尹昱钦 阅读(50) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先判断false的情况:\(\max(a[i+1],a[j-1])>=a[j]\)。 而如果i+1到j之间有没有未知降雨量的年份,则答案是maybe。 否则答案即为true。 离散化放到ST表或线段树上操作一下就行了。 情况太多了细节太多了懒得在这里写了那就说一个吧 我们常常会说 阅读全文
posted @ 2021-09-15 14:56 尹昱钦 阅读(120) 评论(0) 推荐(0)
摘要:传送门 解题思路 直接算逆元太麻烦。 可以用线段树维护区间乘积。 需要进行单点修改和查询整个区间的乘积。 每次1操作,就把当前点修改为m; 每次2操作,就把m点修改为1。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #incl 阅读全文
posted @ 2021-09-15 11:42 尹昱钦 阅读(49) 评论(0) 推荐(0)
摘要:传送门 解题思路 单点修改区间查询最大值。 lazy标记都不需要。 总范围为读入的m的范围。 注意有负值。 AC代码 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #in 阅读全文
posted @ 2021-09-15 10:29 尹昱钦 阅读(45) 评论(0) 推荐(0)
摘要:传送门 扫描线 什么是扫描线? 在一个二维平面上有许多的点,那一根水平或者竖直的直线将其切割。 用途? 降维。 可以把二维问题转变成一维处理。 解决许多数据结构问题。 lxl的重要思路:一维问题 >二维平面 >扫描线降维。 应用条件? 离线。 实现? 线段树或者树状数组。 树状数组常数比较小所以:区 阅读全文
posted @ 2021-09-15 09:32 尹昱钦 阅读(158) 评论(0) 推荐(0)
摘要:传送门 解题思路 经典题的加强版。 根据数据范围得出需要O(n)解决这个问题。 至少要进行一次排序,而且数字<=1e5,所以很显然可以桶排。 然后用两个队列(注意不是优先队列),一个是存原数,一个存和。 每次取出两个队列中前二的两个数字,然后加起来放到第二个队列的队尾即可。 易证两个队列里面的数都满 阅读全文
posted @ 2021-09-14 21:54 尹昱钦 阅读(147) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先 \(t\) 可以直接算出来:\(t=\left \lceil \dfrac{n}{k} \right \rceil\) 我们从最朴素的 dp 开始想。 设 \(dp(i,j)\) 表示前 \(i\) 天,浏览了 \(j\) 个景点的最大评分。 那么转移方程为: \(dp(i, 阅读全文
posted @ 2021-09-14 21:19 尹昱钦 阅读(98) 评论(0) 推荐(0)
摘要:传送门 解题思路 设dp[i][j]为吃掉派[i,j]的最大收益。 枚举中间点k进行转移,表示k这个派没被吃掉。 dp[i][j]=max(dp[i][k-1]+dp[k+1][j]+maxx[k][i][j]); 其中maxx[k][i][j]表示奶牛的喜欢吃的区间[l,r]符合i<=l<=k<= 阅读全文
posted @ 2021-09-13 20:27 尹昱钦 阅读(55) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 9 10 ··· 18 下一页