<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shaohang_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shaohang_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shaohang_]]></copyright><item><title><![CDATA[2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest H题(后缀数组+单调栈+线段树)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/102653933</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/102653933</guid><author>shaohang_</author><pubDate>Sun, 20 Oct 2019 21:39:38 +0800</pubDate><description><![CDATA[题目链接：https://nanti.jisuanke.com/t/A2206

题意：给你n个数，1&lt;=l&lt;=r&lt;=n，求所有本质不同的a[l...r]的最大值的和

分析：本质不同的子串可想到用后缀数组，所有子串等价于该串的所有后缀的所有前缀，利用后缀数组求本质不同的子串的原理，

即本质不同的子串=总子串个数-本质相同的子串个数=

n-sa[i]+1为该后缀的前缀个数，即...]]></description><category></category></item><item><title><![CDATA[BZOJ1150(WQS二分优化dp）]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99885230</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99885230</guid><author>shaohang_</author><pubDate>Tue, 20 Aug 2019 21:20:22 +0800</pubDate><description><![CDATA[题目链接：https://www.lydsy.com/JudgeOnline/problem.php?id=1150

分析：我们用dp[i][j][0/1]表示第i座楼与第i-1座楼是否相连(0/1)，前i座楼构成了前j组的最小距离花费。

然后可以写出转移方程





但显然是n^2，由于j与dp具有单调性，j增加，dp也会增加，而且dp是一个下凸函数，因为选的组的距离会越来越大。

考虑二...]]></description><category></category></item><item><title><![CDATA[2019牛客暑期多校训练营（第十场)（斜率优化dp)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99863231</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99863231</guid><author>shaohang_</author><pubDate>Tue, 20 Aug 2019 17:40:09 +0800</pubDate><description><![CDATA[先推荐一个大佬的博客：https://blog.youkuaiyun.com/lxc779760807/article/details/51366552

J题链接：https://ac.nowcoder.com/acm/contest/890/J

题意：给 n 个木材，求制造 k 个木板浪费的木材的最小值，木材可以随意组合，制造木板浪费的木材：将 m 块木材连在一起，将所有的木材砍成一样的高度，砍掉的就是...]]></description><category></category></item><item><title><![CDATA[wustoj2613电话号码(字典树)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99688945</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99688945</guid><author>shaohang_</author><pubDate>Sat, 17 Aug 2019 09:22:20 +0800</pubDate><description><![CDATA[题目链接：http://10.162.32.3/problem.php?id=2613&amp;soj=0

分析：要求独一无二的字符串，可把每个号码的所有后缀都插入字典树，这样就会得到每个号码的所有子串，然后枚举每个号码的每个后缀，假设删除该后缀后，不存在该后缀了那么该后缀肯定是独一无二的，最后恢复一下就好了。

Ac code：


#include&lt;bits/stdc++.h&gt;
...]]></description><category></category></item><item><title><![CDATA[Codeforces Round #136 (Div. 1)E(尺取法+树状数组)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99685035</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99685035</guid><author>shaohang_</author><pubDate>Fri, 16 Aug 2019 20:31:22 +0800</pubDate><description><![CDATA[题目链接：https://codeforces.com/contest/220/problem/E

题意：只保留a数列中1..l和r..n的数构成b数列，然后b数列的逆序对数小于等于k.问这样的l,r的对数。

分析：树状数组+尺取

枚举l,每次找到最小的满足题意的r，对答案的贡献是n-r+1,然后用两个树状数组，分别维护增加或者减少一个数的时候，前半段和后半段对逆序数的影响。

Ac cod...]]></description><category></category></item><item><title><![CDATA[hdu6665(离散化+bfs)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99607492</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99607492</guid><author>shaohang_</author><pubDate>Wed, 14 Aug 2019 20:37:23 +0800</pubDate><description><![CDATA[题目链接：http://acm.hdu.edu.cn/showproblem.php?pid=6665

题意：两个矩形能把平面分割为多少个部分

比赛时都是疯狂if else 做的，写了200+行，然鹅我不想写这种繁琐的，就没写....

考虑简洁明了的方法，先把坐标离散化，然后把矩形边界标记为1，每次从标记为0的开始bfs，把访问过的点标记为1，由于矩形边界被标记为1了，矩形外面的点bfs时进...]]></description><category></category></item><item><title><![CDATA[期望DP]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99415413</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99415413</guid><author>shaohang_</author><pubDate>Tue, 13 Aug 2019 14:23:09 +0800</pubDate><description><![CDATA[推荐一篇大佬的博客：https://www.cnblogs.com/hua-dong/p/8166093.html

直接上例题

1、hdu4405

题意：有n+1个点编号从0-&gt;n，有m组通道可以直接从xi-&gt;yi不需要花费一次走的次数，每次可投一个骰子，如果点数为x，当前处于i点，即可走到i+x位置，求走到n点的花费的次数的期望。

分析：期望dp一般都是从后往前推，设dp[i...]]></description><category></category></item><item><title><![CDATA[2019 Multi-University Training Contest 7 补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99338645</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99338645</guid><author>shaohang_</author><pubDate>Mon, 12 Aug 2019 21:14:41 +0800</pubDate><description><![CDATA[题目：hdu6656

题意：你处于i级，必须花费a[i]元的前提下，有r[i]/s[i]的概率跳到i+1级，也有1-r[i]/s[i]的概率掉回x[i]级（x[i]&lt;=i)，有q组询问，每次有l,r问从l升到r的花费期望。

分析：需要列出方程找公式，设f(i-&gt;i+1)表示从i-&gt;i+1花费的期望，则

用sum[i]表示从1-&gt;i的花费期望

则化简得：

最后递推一...]]></description><category></category></item><item><title><![CDATA[2019牛客暑期多校训练营（第八场）补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99290410</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99290410</guid><author>shaohang_</author><pubDate>Mon, 12 Aug 2019 10:34:54 +0800</pubDate><description><![CDATA[A题：

题目链接：https://ac.nowcoder.com/acm/contest/888/A

题意：求所有全为1的矩阵且每个子矩阵都不会被其他矩阵完全包含的子矩阵的个数。

分析：最近遇到的全1子矩阵的题有点多额....，可是还是不怎么会做。但基本都用了单调栈....

设h[i][j]表示第i行以j点为底点的最高连续的1的个数，可以用单调栈求使j点以h[i][j]为高度的矩形的左右边...]]></description><category></category></item><item><title><![CDATA[2019牛客暑期多校训练营（第七场）补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99288479</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99288479</guid><author>shaohang_</author><pubDate>Mon, 12 Aug 2019 10:00:08 +0800</pubDate><description><![CDATA[C题：

链接：https://ac.nowcoder.com/acm/contest/887/C

题意：n中树，第i种树有P[i]颗，砍掉每颗树的代价是C[i], 高度是H[i].需要用最小的代价砍掉一些树，让最高的树超过一半。

分析：从从低到高枚举最高的树，在剩下的树当中砍掉代价最小的。可以用一颗线段树维护。线段树按照代价从小到大的顺序构建，支持单点插入，查询前x个的总和。

Ac c...]]></description><category></category></item><item><title><![CDATA[Comet OJ - Contest #8 C题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/99003691</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/99003691</guid><author>shaohang_</author><pubDate>Fri, 09 Aug 2019 23:06:35 +0800</pubDate><description><![CDATA[题目链接：https://www.cometoj.com/contest/58/problem/C

分析：一个dp题，关键是怎么设计，详细见代码注释

Ac code:


#include&lt;bits/stdc++.h&gt;
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll a[maxn],b[maxn...]]></description><category></category></item><item><title><![CDATA[2019 Multi-University Training Contest 6补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/98784588</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/98784588</guid><author>shaohang_</author><pubDate>Wed, 07 Aug 2019 21:17:21 +0800</pubDate><description><![CDATA[题目：hdu6638

题意：给你n个点，每个点都有一个坐标和权值，要你寻找一个矩阵使其内部的点的权值和最大。

分析：把n个点按横坐标排序一下，首写枚举左右边界，当左边固定右边界移动时，会将x值相等的坐标加进来，x值相等的左边加完后查询此时的最大子段和，更新答案。

Ac code:


#include&lt;bits/stdc++.h&gt;
using namespace std;
typ...]]></description><category></category></item><item><title><![CDATA[2019 Multi-University Training Contest 5补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/98671977</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/98671977</guid><author>shaohang_</author><pubDate>Tue, 06 Aug 2019 22:57:33 +0800</pubDate><description><![CDATA[题目：hdu6625

题意：给你两个数组a,b，要求你重排a,b使c[i]=a[i]^b[i]得到的c数组字典序最小

分析：根据贪心思想，每次都要求得a[i]^b[i]都最小才能保证字典序最小。

有两种方法：

方法一：对a,b两个数组建两颗字典树，每次同时遍历两棵字典树，如果都为0或都为1就走，否则没有办法只有一个走0一个走1，此时对答案产生贡献，每次找出来的最后排个序就ok

Ac co...]]></description><category></category></item><item><title><![CDATA[ACM-ICPC 2018 焦作赛区网络预赛 E(树链剖分+线段树)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/98646481</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/98646481</guid><author>shaohang_</author><pubDate>Tue, 06 Aug 2019 18:53:49 +0800</pubDate><description><![CDATA[题目链接：https://nanti.jisuanke.com/t/A2015

题意：给你一棵树，根结点为1，初始每个结点值都为0，支持以下操作

1、u v x 将u-&gt;v路径上的每个结点的值都乘上x

2、u v x 将u-&gt;v路径上的每个结点值都加上x

3、u v 将u-&gt;v路径上的每个结点值都按位取反

4、u v 求u-&gt;v路径上的每个节点的值的和

分析：如...]]></description><category></category></item><item><title><![CDATA[2019 Multi-University Training Contest 2 补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/97183131</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/97183131</guid><author>shaohang_</author><pubDate>Wed, 24 Jul 2019 23:35:07 +0800</pubDate><description><![CDATA[1011：http://acm.hdu.edu.cn/showproblem.php?pid=6601

题意：给你n个数，q次询问，每次询问一个区间[l,r]表示只能从[l,r]区间里选最大的能构成三角形的三条边，输出其最大周长。

分析：一看肯定说用线段树维护，但。。。。。比赛时想了好久不知道维护什么，甚至还不顾莫队的T飞的复杂度交了几发。

维护一个区间的45个最大值，这样一定能找到周长最大...]]></description><category></category></item><item><title><![CDATA[2019 Multi-University Training Contest 1补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/96994217</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/96994217</guid><author>shaohang_</author><pubDate>Tue, 23 Jul 2019 15:04:41 +0800</pubDate><description><![CDATA[1002：http://acm.hdu.edu.cn/showproblem.php?pid=6579

题意：给你n个数，有m次操作，每次操作有两种

1、0 l r 表示查询[l,r]里选任意个数时异或值最大。

2、1 x表示在n个数后面继续添加1个数x，并令n=n+1

分析：选任意个数使异或值最大肯定是线性基的题，比赛时直接上线段树维护区间线性基，时间复杂度都没算，结果T到飞起.......]]></description><category></category></item><item><title><![CDATA[2019牛客暑期多校训练营（第二场）补题]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/96775736</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/96775736</guid><author>shaohang_</author><pubDate>Sun, 21 Jul 2019 23:29:50 +0800</pubDate><description><![CDATA[题目链接：https://ac.nowcoder.com/acm/contest/882#question

H题：

题意：给你一个01矩阵，要你求全为1的第二大子矩阵

分析：用单调栈或悬线法皆可以。

法一：单调栈

设dp[i][j]表示以(i,j)为底点，底边长为1，dp[i][j]为高的矩阵。用单调栈处理最大子矩阵问题，但要注意每个点都要更新最值，不然找不出所有的值也就不一定找的到第二...]]></description><category></category></item><item><title><![CDATA[hdu3804(树链剖分+线段树)]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/96312968</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/96312968</guid><author>shaohang_</author><pubDate>Wed, 17 Jul 2019 15:29:11 +0800</pubDate><description><![CDATA[题目：http://acm.hdu.edu.cn/showproblem.php?pid=3804

题意：给你一个树，每条边都有一个权值，现在有m组询问，每次询问输入一个二元组(x,y)，其结果要满足以下两个条件的最大值

1、必须是从x-&gt;1路径上的一条边

2该边的权值必须&lt;=y，且是最大的边

分析：把询问离线处理，先把原本树的边按权值从小到大排序，询问按y值从小到大排，对于边...]]></description><category></category></item><item><title><![CDATA[Codeforces Round #199 (Div. 2) E]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/96283120</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/96283120</guid><author>shaohang_</author><pubDate>Wed, 17 Jul 2019 10:52:03 +0800</pubDate><description><![CDATA[题目链接：https://codeforces.com/problemset/problem/342/E

题意：给你一个树，起初根结点(1号结点）为红色，其余结点为蓝色，每次有两种操作。

1、把蓝色结点涂成红色

2、求给定结点v与树上最近的结点之间的距离，每条边权值都为1

分析：题解很巧妙，把m次操作中1操作分成块，每次对于1操作次数如果到了sqrt(m)，就用bfs更新已有的红色点i到其...]]></description><category></category></item><item><title><![CDATA[树链剖分]]></title><link>https://blog.youkuaiyun.com/shaohang_/article/details/96157123</link><guid>https://blog.youkuaiyun.com/shaohang_/article/details/96157123</guid><author>shaohang_</author><pubDate>Tue, 16 Jul 2019 17:40:07 +0800</pubDate><description><![CDATA[第一次学树剖，推荐一篇大佬博客：https://www.cnblogs.com/KatouKatou/p/9557540.html

树剖关键代码：


void dfs1(int u,int f){
    sze[u]=1;
    for (int i=head[u];~i;i=edge[i].nxt){
        int v=edge[i].v;
        if(v==f)co...]]></description><category></category></item></channel></rss>