<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Black__wing的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Black__wing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Black__wing]]></copyright><item><title><![CDATA[扫描线求矩形是否相交]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/102613469</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/102613469</guid><author>Black__wing</author><pubDate>Thu, 17 Oct 2019 19:34:25 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
const int maxn=300005;
struct node
{
    int l,r,h,val;
    bool operator &lt;(const node &amp;x)const
    {
        return h&lt;x.h;
    }
}b[maxn]...]]></description><category></category></item><item><title><![CDATA[2019沈阳网络赛B 并查集+dfs]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/100993734</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/100993734</guid><author>Black__wing</author><pubDate>Wed, 18 Sep 2019 19:03:47 +0800</pubDate><description><![CDATA[补题的时候，忘记将怪兽节点的size值变为0。


#include&lt;bits/stdc++.h&gt;
using namespace std;
int fa[200005],siz[200005];
int getfa(int x)
{
    int fx=fa[x];
    if(fx!=x)
    {
        fa[x]=getfa(fx);
    }
    ret...]]></description><category></category></item><item><title><![CDATA[2019 牛客暑假多校训练营 第四场 I 广义后缀自动机+回文自动机]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/99335198</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/99335198</guid><author>Black__wing</author><pubDate>Mon, 12 Aug 2019 20:36:32 +0800</pubDate><description><![CDATA[广义后缀自动机，求多个串的本质不同子串个数。

回文自动机求回文串个数


#include&lt;bits/stdc++.h&gt;
using namespace std;
const int maxn = 4e5+100;
char s[maxn];
int len;
int T;
int n,m;
struct SAM
{
    int last,cnt,nxt[maxn*2][26]...]]></description><category></category></item><item><title><![CDATA[牛客网小白月赛 16 H 线段树求gcd]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/98848820</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/98848820</guid><author>Black__wing</author><pubDate>Thu, 08 Aug 2019 10:24:35 +0800</pubDate><description><![CDATA[线段树维护差分数组，求gcd


#include&lt;bits/stdc++.h&gt;
using namespace std;
const int maxn=1e5+100;
int sum[maxn*4];
int gcd[maxn*4],maxx[maxn*4];
int a[maxn];
void pushup(int i)
{
    sum[i]=sum[i*2]+sum[i*2...]]></description><category></category></item><item><title><![CDATA[2019hdu暑假多校训练营第四场 H 主席树+二分]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/98615051</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/98615051</guid><author>Black__wing</author><pubDate>Tue, 06 Aug 2019 14:25:35 +0800</pubDate><description><![CDATA[主席树+二分

二分与p的距离，确定与[p-mid,p+mid]这个区间中有多少个点，如果大于等于k个，说明这个区间合理，可以缩小寻找范围，否则增大寻找范围。


#include&lt;bits/stdc++.h&gt;
using namespace std;
const int maxn=1e5+10;
int root[maxn*40];
int sum[maxn*40];
int ls[...]]></description><category></category></item><item><title><![CDATA[洛谷p2444 p4052 AC自动机]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97913130</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97913130</guid><author>Black__wing</author><pubDate>Wed, 31 Jul 2019 14:17:25 +0800</pubDate><description><![CDATA[ac自动机fail指针，即为当失配后，跳转至与当前后缀相同的一个前缀上。

因此如果一个点的fail指向的点是一个单词的终止，那么说明当前匹配到的这个位置，一定包括这个单词。

因此建立fail指针时，我们可以更新ed的值，由此来判断，当到达这个点的时候是否会经过单词的结尾。

P2444 在ac自动机上找一个无限循环的串，且这个串不可经过单词结尾，通过nxt数组进行dfs，维护两个数组，一个判断...]]></description><category></category></item><item><title><![CDATA[hdu多校2 I I Love Palindrome String 回文自动机+hash]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97910934</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97910934</guid><author>Black__wing</author><pubDate>Wed, 31 Jul 2019 13:48:52 +0800</pubDate><description><![CDATA[回文自动机学习链接：https://blog.youkuaiyun.com/lwfcgz/article/details/48739051

                 https://www.cnblogs.com/Xu-daxia/p/10544128.html#autoid-0-3-0

对于此题，回文自动机记录本质不同回文串出现次数，hash判断这个回文...]]></description><category></category></item><item><title><![CDATA[洛谷p2322 ac自动机+最短路+dfs]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97618834</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97618834</guid><author>Black__wing</author><pubDate>Sun, 28 Jul 2019 20:17:38 +0800</pubDate><description><![CDATA[ac自动机建立fail指针，求出每个点能覆盖的全部串种类，bfs求出最短母串长度（最短路），dfs求出路径输出。


#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;queue&gt;
#include &lt;cstring&gt;
#include &lt;alg...]]></description><category></category></item><item><title><![CDATA[洛谷p4180 ac自动机]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97615416</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97615416</guid><author>Black__wing</author><pubDate>Sun, 28 Jul 2019 15:47:20 +0800</pubDate><description><![CDATA[匹配字符串时，对于重复的单词我们只考虑一次，我们开一个数组记录，重复单词的第一个id将重复单词的出现次数全部变为第一次出现的个数相加。且在匹配时，对于每个now只扫描一次，不重复扫描。


#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;queue&gt;
#incl...]]></description><category></category></item><item><title><![CDATA[洛谷p3121 ac自动机]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97614439</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97614439</guid><author>Black__wing</author><pubDate>Sun, 28 Jul 2019 14:38:10 +0800</pubDate><description><![CDATA[ac自动机匹配时，建立两个栈，其中一个栈存储答案，另一个栈存储失配指针。

如果在某点找到我们要删除的单词（全部），那么我们要将匹配指针前移至此单词前面那个字母，即将我们的指针前移长度单位。


#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;queue&gt;
#i...]]></description><category></category></item><item><title><![CDATA[主席树学习总结]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97611260</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97611260</guid><author>Black__wing</author><pubDate>Sun, 28 Jul 2019 09:38:37 +0800</pubDate><description><![CDATA[主席树即每次建立改变点的链接，建立n颗权值线段树，根据其类似于前缀和的性质，求解区间第k大问题。

POJ - 2104数组区间上求第k大：


#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;algorithm&gt;
#include&lt;cstdlib&gt;
#include&lt;cstdio&gt;
#incl...]]></description><category></category></item><item><title><![CDATA[hdu 5068&&2019牛客网暑假多校训练赛E 线段树+矩阵乘法]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/97157274</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/97157274</guid><author>Black__wing</author><pubDate>Wed, 24 Jul 2019 19:43:38 +0800</pubDate><description><![CDATA[hdu 2068


#include&lt;bits/stdc++.h&gt;
using namespace std;
//用线段树维护一个2*2的矩阵，a[i][j]表示从这一层第i个门到下一层第j个门是否联通，
//第i层到第j层之间的矩阵相乘之后的结果矩阵，各元素和为从第i层到第j层的种类数
const int mod=1000000007;
struct mat{
    long ...]]></description><category></category></item><item><title><![CDATA[2019牛客暑假多校训练营第一场 A 单调栈]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/96474162</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/96474162</guid><author>Black__wing</author><pubDate>Fri, 19 Jul 2019 09:37:00 +0800</pubDate><description><![CDATA[两个数组中，第i个左边第一个比a[i]小的值的下标相等的时候，就说明这两个数组等价。

当判断向右移动一位时，我们可以发现，我们需要重新是否等价的区间新增了[1,i],[2,i]···[i-1,i];当右边第一个比a[i]小的下标为j时，区间左值小于等于j的显然最小值都是相等的（因为最小值不是a[j]就是在a[j]的左边，这一部分在i-1时已经判断相等），当区间左值大于j时，我们可以发现，最小值都...]]></description><category></category></item><item><title><![CDATA[hdu6333 莫队+组合数]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/96319912</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/96319912</guid><author>Black__wing</author><pubDate>Wed, 17 Jul 2019 16:09:55 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
//组合数性质：
//(n,m)=(n-1,m-1)+(n-1,m);
//由题意可知求s(n,m)=sega(i=0-m)(n,i);
//s(n,m)=s(n,m-1)+(n,m);
//s(n,m)=2*s(n-1,m)-(n-1,m);
const int maxn=2e5;
struc...]]></description><category></category></item><item><title><![CDATA[基础莫队分块优化模板]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/96276410</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/96276410</guid><author>Black__wing</author><pubDate>Wed, 17 Jul 2019 09:57:15 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
//分块时按左端点所在块排序，块内按照右端点排序
const int maxn=100000;
struct query
{
    int l,r,id,pos;
    bool operator &lt;(const query &amp;x) const{
        if(pos=...]]></description><category></category></item><item><title><![CDATA[CF EDU 68 E树状数组判断直线之间构成矩形的个数]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/95995422</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/95995422</guid><author>Black__wing</author><pubDate>Mon, 15 Jul 2019 18:00:07 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
const int maxn=200000;
long long tr[maxn+100];
struct node{
    int x,l,r;
};
node q[200000],p[200000];
int n;
void add(int x,long long t)
{
    whi...]]></description><category></category></item><item><title><![CDATA[线段树区间01区间值异或与相邻1个数]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/95928155</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/95928155</guid><author>Black__wing</author><pubDate>Sun, 14 Jul 2019 21:30:52 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
int tr[800000],l1[800000],r1[800000];
int l2[900000],r2[900000],tr2[800000];
int lazy[900000],a[200000];
void  pushup(int i,int l,int r)
{
    int m...]]></description><category></category></item><item><title><![CDATA[树链剖分边权 poj 3237]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/92840418</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/92840418</guid><author>Black__wing</author><pubDate>Wed, 19 Jun 2019 18:32:52 +0800</pubDate><description><![CDATA[#include &lt;cstdio&gt;
#include&lt;string.h&gt;
#include&lt;algorithm&gt;
#include&lt;iostream&gt;
using namespace std;
const int M=2e5+100;
int f[M];
int d[M];
int siz[M];
int rk[M];//保存树链剖分后，节点编号对...]]></description><category></category></item><item><title><![CDATA[权值线段树模板]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/92405980</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/92405980</guid><author>Black__wing</author><pubDate>Sun, 16 Jun 2019 16:31:39 +0800</pubDate><description><![CDATA[#include &lt;bits/stdc++.h&gt;
using namespace std;
const int maxn=1e6+10;
const long long mod=1e9+7;

long long sum[maxn*4],val[maxn*4];
int ls[maxn*4],rs[maxn*4];
int cnt;
void update(int &amp;root...]]></description><category></category></item><item><title><![CDATA[C. Electrification]]></title><link>https://blog.youkuaiyun.com/Black__wing/article/details/91128763</link><guid>https://blog.youkuaiyun.com/Black__wing/article/details/91128763</guid><author>Black__wing</author><pubDate>Fri, 07 Jun 2019 16:56:56 +0800</pubDate><description><![CDATA[思路借鉴：https://blog.youkuaiyun.com/qq_43506138/article/details/90990594感谢大佬

对于一个长度为n的序列k=n-1，那么对于第k+1即第n个最小就是取点为区间中最大值与最小值的和出2（（max+min）/2），当k小于n-1时，我们可以发现，我们想要找到区间中第k+1大的数，可以每次取一个长度为k+1的序列，那么，第k+1大的数一定出现在这...]]></description><category></category></item></channel></rss>