<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[morejarphone~]]></title><description><![CDATA[从爱好，到梦想]]></description><link>https://blog.youkuaiyun.com/morejarphone</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; morejarphone]]></copyright><item><title><![CDATA[codeforces 785E (树状数组套平衡树)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/64126515</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/64126515</guid><author>morejarphone</author><pubDate>Mon, 20 Mar 2017 15:25:51 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：动态逆序对问题。一个[1,2,3…n][1,2,3\dots n]的数组，每次操作是交换两个元素，输出交换后的逆序对数。需要计算的是交换的两个数，在它们中间的数中分别有多少数比他们大（小）。利用树状数组的思想，把下标为i的树用第i,i+lowbit(i),i+lowbit(i)+lowbit(i+lowbit(i))...i,i+lowbit(i),i+lowbit(i)+l]]></description><category></category></item><item><title><![CDATA[codeforces 645F (莫比乌斯反演)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53456409</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53456409</guid><author>morejarphone</author><pubDate>Sun, 04 Dec 2016 20:56:30 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出初始n个数,问每次增加一个数字后的k元组的gcd之和.只需要求出gcd分别等于1-1e6的k元组数. 设F[x]F[x]表示gcd等于x的倍数的k元组数量,f[x]f[x]表示gcd等于x的k元组数量,那么就有: 
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪f[1]=μ(1)F[1]+μ(2)F[2]+μ(3)F[3]+⋯+μ[n]F[n]f[2]=μ(1)F[2]+μ(2)F[4]+μ]]></description><category></category></item><item><title><![CDATA[codeforces 731D (DP 二分 二维RMQ)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53434806</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53434806</guid><author>morejarphone</author><pubDate>Fri, 02 Dec 2016 15:03:57 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出一个01矩阵，每次询问一个矩形中的最大全1正方形的边长。用dp[i][j]dp[i][j]存储以(i,j)(i,j)为右下角的最大全1正方形，转移方程就是dp[i][j]={min{dp[i−1][j],dp[i][j−1],dp[i−1][j−1]}+10(val[i][j]=1)(val[i][j]=0)dp[i][j]=
\left\{
\begin{aligned]]></description><category></category></item><item><title><![CDATA[codeforces 650D (树状数组)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53428560</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53428560</guid><author>morejarphone</author><pubDate>Fri, 02 Dec 2016 00:03:51 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：动态LIS，改变一个值求LIS。先把询问离线下来按照改变的位置排序，把所有的数字离散化。首先先用树状数组求出每一位为结尾的最长上升前缀f[i]和每一位开始的最长上升后缀g[i]，然后考虑每一个数字改变后的LIS情况，分成两种讨论：
LIS不包含这个数。这种情况比较简单，考虑是不是每一个LIS都含有这个数字即可，也即对于所有的LIS，某一位必须是这个数。所以直接统计每一个数字在]]></description><category></category></item><item><title><![CDATA[codeforces 508E (构造)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53423523</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53423523</guid><author>morejarphone</author><pubDate>Thu, 01 Dec 2016 16:52:06 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：依次给出从左到右每一个左括号到与其匹配的右括号的距离范围，求出一个合法的括号序列。注意到如果一个括号他的右括号已经可以放了那么就可以直接放上去。那么直接先把左括号扔进一个栈，并且记录下所有栈中的左括号在没找到与之匹配的右括号之前中间长度增加了多少。扫一边就好了。#include <cstdio>
#include <iostream>
#include <cstring>
#]]></description><category></category></item><item><title><![CDATA[codeforces 508D (无向图欧拉路径)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53423418</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53423418</guid><author>morejarphone</author><pubDate>Thu, 01 Dec 2016 16:46:02 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出n个单词（长度为3），求出一种头尾相连的方案。两个单词能连起来当且仅当前一个单词的后两位和后一个单词的前两位相同。直接把每个单词看成边，前两位和后两位看成点，跑欧拉路径即可。需要一些优化把欧拉路径改成线性。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <]]></description><category></category></item><item><title><![CDATA[POJ 2337 (有向图欧拉通路)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53415644</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53415644</guid><author>morejarphone</author><pubDate>Wed, 30 Nov 2016 23:50:02 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出n个单词，求出最小字典序的头尾连接方案。欧拉通路板子题。把每个单词当做边，头字母和尾字母当做节点，建完跑欧拉通路即可。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorithm>
#include <stack>]]></description><category></category></item><item><title><![CDATA[ACdream 1211 (无源汇上下界网络流)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53402469</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53402469</guid><author>morejarphone</author><pubDate>Tue, 29 Nov 2016 23:49:30 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出一个无源汇有上下界网络流，求出一种可行流。板子题，建立超级远点S，超级汇点T，对于每一条边<u,v,l,r><u,v,l,r>，u-T连边,流量为l；S-v连边，流量为l；u-v连边，流量为r-l。然后跑最大流输出即可。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#in]]></description><category></category></item><item><title><![CDATA[HDU 5992 (kdtree)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53271048</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53271048</guid><author>morejarphone</author><pubDate>Tue, 22 Nov 2016 00:21:43 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出n个酒店，每个酒店有一个花费和坐标。然后给出m个询问，输出离询问最近并且花费在询问要求内的酒店。第一个想法是两种东西按照花费排序，每次插入新酒店。但是这个插入比较麻烦，在kdtree退化的时候需要及时重构（套个替罪羊树啥的）。 
还有一种就是直接建三维kdtree，然后对于每一个询问，如果一个节点范围内最小第三维比询问大，那么可以直接忽略。计算的时候只要算上两维的距离即可]]></description><category></category></item><item><title><![CDATA[BZOJ 3053 (kdtree)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53236070</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53236070</guid><author>morejarphone</author><pubDate>Sat, 19 Nov 2016 22:49:07 +0800</pubDate><description><![CDATA[题目链接：点击这里k维坐标系下的最近点对问题。直接对于每一个询问都在kdtree中询问m次最近点，每次找到一个最近点对需要把它记录下来，当下次再找到它的时候距离直接设置成无穷大即可。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorithm]]></description><category></category></item><item><title><![CDATA[HDU 2966 (kdtree板子题)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53230556</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53230556</guid><author>morejarphone</author><pubDate>Sat, 19 Nov 2016 15:08:14 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出n个不同的点，求出离每个点欧几里得距离平方最近的其他点。只需要一点小技巧即可：当当前kdtree节点坐标和询问坐标一致时，距离改成无穷大（因为不能选择自己）。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorit]]></description><category></category></item><item><title><![CDATA[BZOJ 2648 (kdtree)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53230507</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53230507</guid><author>morejarphone</author><pubDate>Sat, 19 Nov 2016 15:05:31 +0800</pubDate><description><![CDATA[题目链接：点击这里题意：给出n个点，接下来m个操作，每次插入一个点，或者询问离询问点的最近曼哈顿距离。直接暴力插点询问即可。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorithm>
#include <stack>
#define Cl]]></description><category></category></item><item><title><![CDATA[Kattis taboo (AC自动机 拓扑排序 DP)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53206209</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53206209</guid><author>morejarphone</author><pubDate>Thu, 17 Nov 2016 20:18:26 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出n个01串,要构造一个最长的串使得这个串不包含所有出现过的串,无解输出-1.首先把所有的点扔进自动机,因为出现过的串不能在我们构造的串中出现,所以事先把某些”坏点”标记,坏点指的就是每个串的结束节点以及沿着结束节点fail指针走下去的节点. 如果剩下的图中能够沿着根走出一个环那么必然就无解了, 判环可以用一遍拓扑确定. 排除无解情况剩下就是一个DAG了, 用dp[i][j]]></description><category></category></item><item><title><![CDATA[Kattis peaktram (树状数组 DP)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53205999</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53205999</guid><author>morejarphone</author><pubDate>Thu, 17 Nov 2016 20:06:08 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出n个物体的高度以及将他们高度改变1单位的花费,一个观测点从最左端从0往上走,一直平视. 问至少能观测到k个物体的最小花费.因为高度比较大,所以需要将高度离散化,那么需要离散化哪些高度呢?容易发现对于每一个建筑,只要把它+-70范围内的高度离散化就好了,这样最多就是70*140种高度.然后用dp[i][j][k]dp[i][j][k]表示到i物体,最大高度是j,一共看到k个]]></description><category></category></item><item><title><![CDATA[codeforces 734F (数学)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53195897</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53195897</guid><author>morejarphone</author><pubDate>Thu, 17 Nov 2016 09:42:47 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出两个数组b,c,构造a数组满足条件.首先需要知道一个推论:a AND b+a OR b=a+ba\ AND\ b+a\ OR \ b=a+b,这个按位比较很显然是相等的. 然后把原式的bib_i和cic_i加起来就得到了: 
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪b.1+c1=na1+∑ab2+c2=na2+∑a⋮bn+cn=nan+∑a\begin{equation}]]></description><category></category></item><item><title><![CDATA[codeforces 734E (树的最大直径)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53195772</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53195772</guid><author>morejarphone</author><pubDate>Thu, 17 Nov 2016 09:33:39 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出一个树,每个节点有一种颜色.每次能够选中一个节点,其他的点如果到它的路径上都是这种颜色那么可以一起改变颜色.问最少需要改变几次颜色.先按照颜色缩点, 然后答案就是缩点之后树的最大直径, 直接DP即可.#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cma]]></description><category></category></item><item><title><![CDATA[BZOJ 3876 (流量有下界费用流)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53180513</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53180513</guid><author>morejarphone</author><pubDate>Wed, 16 Nov 2016 00:07:58 +0800</pubDate><description><![CDATA[题目链接:点击这里需要经过题目给出的边至少一次,也就是流量下界是1.另外有一类边:所有的点连向1,流量是无穷大费用是0. 对于有流量下界的点,就是经典的构造方法:对于#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorithm>
#inclu]]></description><category></category></item><item><title><![CDATA[HDU 5517 (二维树状数组)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53100454</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53100454</guid><author>morejarphone</author><pubDate>Wed, 09 Nov 2016 15:30:27 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出一个pair(a,b)集合A,triple(c,d,e)集合B,然后如果b和e相等可以把新的triple(a,c,d)扔到集合C.求C中的(a,b,c)个数使得C中不存在(u,v,e)满足{(a,b,c)≠(u,v,e),a≤u,b≤v,c≤e}\left\{ (a,b,c)\neq (u,v,e) ,a \leq u,b \leq v, c \leq e  \right]]></description><category></category></item><item><title><![CDATA[HDU 2888 (二维RMQ)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53085173</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53085173</guid><author>morejarphone</author><pubDate>Tue, 08 Nov 2016 18:07:15 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:给出一个矩阵,每次询问一个子矩阵中的最大元素,以及最大元素是不是和子矩阵的某个角相等.二维RMQ的板子~#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <algorithm>
#define Clear(x,y) memset]]></description><category></category></item><item><title><![CDATA[POJ 3621 (最优比率环 二分+SPFA)]]></title><link>https://blog.youkuaiyun.com/morejarphone/article/details/53082800</link><guid>https://blog.youkuaiyun.com/morejarphone/article/details/53082800</guid><author>morejarphone</author><pubDate>Tue, 08 Nov 2016 15:32:59 +0800</pubDate><description><![CDATA[题目链接:点击这里题意:找出一个环, 最大化∑vi∑Ei\frac{\sum v_i}{\sum E_i}.假设答案是ans.那么有∑vi∑Ei=ans\frac{\sum v_i}{\sum E_i}=ans也就是∑vi−ans∑Ei=0\sum v_i-ans\sum E_i=0.因为是一个环,所以环上每个点都被算了两次,所以可以给每条边对应一个FiF_i表示边上两个节点权值和的一半,所以所求就]]></description><category></category></item></channel></rss>