<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sin_XF的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sin_XF</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sin_XF]]></copyright><item><title><![CDATA[JAVA虚拟机--垃圾回收算法]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/60878108</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/60878108</guid><author>sin_XF</author><pubDate>Wed, 08 Mar 2017 18:23:30 +0800</pubDate><description><![CDATA[三个问题
1.哪些内存需要回收
2.什么时候回收
3.如何回收




1.主要的回收对象是JAVA堆里面的对象，这里的空间占了大多数空间。
这里面哪些对象要回收呢？主要是一些死掉的对象，也就是没有被引用的对象。
判断这些对象有两种算法：
①引用计数算法：每个对象加一个引用计数器，每次引用一次对象，计数器加一；引用失效，计数器减一。
   缺点：无法解决循环引用的问题。
]]></description><category></category></item><item><title><![CDATA[线段树专题—HDU 4027 Can you answer these queries?]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47727559</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47727559</guid><author>sin_XF</author><pubDate>Mon, 17 Aug 2015 17:21:43 +0800</pubDate><description><![CDATA[题意：给n（1-100000）个点，且所有点的值的和不超过2的63次，然后m（1-100000）个操作，操作有两种，一种把一段区间的每个点的值变为他的开根号的值，另一种是询问一段区间点值的和


分析：先求出最多要更新的次数，然后进行判断，下面是计算：
设一共有n个点，每个点的值一样为k(最极端的情况)，值的总和当做2^63（最极端的和）
那么再设n=2^a,k=2^b
由于n*k=2]]></description><category></category></item><item><title><![CDATA[线段树专题—ZOJ1610 Count the Colors]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47726363</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47726363</guid><author>sin_XF</author><pubDate>Mon, 17 Aug 2015 16:02:37 +0800</pubDate><description><![CDATA[题意：给一个n，代表n次操作，接下来每次操作表示把[l，r]区间的线段涂成k的颜色其中,l,r,k的范围都是0到8000


分析：其实就是拿线段树维护一段区间的颜色，总体用到的是线段树的区间更新把，但是会给人一种区间合并的错觉


注意：这题比较坑的是千万不能拿n建树，不然就会segmentation fault，必须拿8000建树，也就是树是固定的


代码：
#inclu]]></description><category></category></item><item><title><![CDATA[Codeforces Round #315 (Div. 2) C - Primes or Palindromes?(暴力打表)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47682425</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47682425</guid><author>sin_XF</author><pubDate>Sat, 15 Aug 2015 15:58:46 +0800</pubDate><description><![CDATA[题意：给一个p和q然后求π(n) ≤ p/q*rub(n)，的最大的n值，其中π(n) 表示从1到n之间的素数的个数，
rub(n)表示从1到n之间的回文数的个数（回文数不能有前导0，且从左到右和从右到左一样）


分析：其实这题没有题目没有确定n的范围让人不敢直接暴搜打表，但是你只要手动写个函数y=π(n) /rub(n)
手动模拟暴力一下就可以发现其实这个函数大概是先下降后上升的，由]]></description><category></category></item><item><title><![CDATA[线段树专题—POJ 3667 Hotel（区间合并模板）]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47681763</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47681763</guid><author>sin_XF</author><pubDate>Sat, 15 Aug 2015 14:47:53 +0800</pubDate><description><![CDATA[题意：给一个n和m，表示n个房间，m次操作，操作类型有2种，一种把求连续未租出的房间数有d个的最小的最左边的房间号，另一个操作时把从x到x+d-1的房间号收回。


分析：这是一个区间合并的典型应用，基本只要套套模板就好了


下面是对区间合并的解释：
up函数：当修改完此时的区间时，为了维护该区间上面区间值的正确性，向上回朔更新上面区间的值
down函数：把延迟标记下传，并修改下]]></description><category></category></item><item><title><![CDATA[HDU 5375  Gray code（DP）]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47438973</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47438973</guid><author>sin_XF</author><pubDate>Wed, 12 Aug 2015 09:19:22 +0800</pubDate><description><![CDATA[题意：给一串字符串，里面可能出现0,1,?，其中问号可能为0或1，将这个二进制转换为格雷码后，格雷码的每位有一个权值，当格雷码位取1时，加上该位权值，求最大权值和为多少。


分析：比赛的时候愚了，居然以为格雷码是由3个二进制字符转换的，于是妥妥wa了，其实格雷码的求法是通过异或求的的，即Gi=Bi⊕Bi-1（G为格雷码，B为二进制数），那么只要水水的DP一下就好了，具体DP是通过保存
D]]></description><category></category></item><item><title><![CDATA[线段树专题—HDU1698 Just a Hook]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47402267</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47402267</guid><author>sin_XF</author><pubDate>Mon, 10 Aug 2015 17:57:04 +0800</pubDate><description><![CDATA[题意：t组数据，给一个n，m表示n长度的钩和m次操作，初始钩子的每单位长度的价值为1，接下来输入 x,y,k 的操作把钩子[x,y]区间的价值替换为k,求m次操作后钩子的价值为多少


分析：成段替换，最后只要求第一个区间就可以了，使用不用写query询问


代码：
#include 
#include 
#include 
#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[线段树专题 POJ3468 A Simple Problem with Integers]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47401051</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47401051</guid><author>sin_XF</author><pubDate>Mon, 10 Aug 2015 16:55:23 +0800</pubDate><description><![CDATA[题意：n个点，m个操作，两种操作类型，C X Y K 表示区间[x,y]上每个点值加k，Q X Y 求区间[x,y]的和


分析：线段树区间求和，裸模板


注意：结果会超int，要用long long 表示，如果是在hust上交结果要用%I64d，poj的话则用%lld


代码：
#include 
#include 
#include 
#include 
#inclu]]></description><category></category></item><item><title><![CDATA[线段树专题—HDU2795 Billboard]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47398289</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47398289</guid><author>sin_XF</author><pubDate>Mon, 10 Aug 2015 14:41:46 +0800</pubDate><description><![CDATA[题意：给一块h*w广告板，然后给n个1*wi的广告条，广告条放的顺序是有限选择向上的，再优先选择左边的，对于每块广告条，输出它放的位置，如果放不下，输出-1


分析：很简单的单点更新max值的线段树，思路很好想，以广告板的每个高度建树，更新点的时候优先选择高度值小的点。


注意：比较容易出错的是 ，要注意h的范围啊1e9！！！，直接以这个高度建树肯定爆啊，这里注意到n是200000]]></description><category></category></item><item><title><![CDATA[HDU 5365 Run(暴力)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47393277</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47393277</guid><author>sin_XF</author><pubDate>Mon, 10 Aug 2015 08:49:29 +0800</pubDate><description><![CDATA[题意：给一个n和n个整数坐标问这些点能组成几个不同正三角形，正方形，正五边形，正六边形。


分析：由于坐标都是整数，使用只可能有正方形，其他都不可能，那么只要对于每四个不同的点，判断2组对边相等，两条对角线也相等，临边也相等即可。


代码：
#include 
#include 
#include 
#include 
#include 
#pragma comment(link]]></description><category></category></item><item><title><![CDATA[HDU 5340 Three Palindromes (manacher算法)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47311327</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47311327</guid><author>sin_XF</author><pubDate>Thu, 06 Aug 2015 09:30:19 +0800</pubDate><description><![CDATA[题意：给一个20000长度的字符串，问能否拆成3个非空的回文


分析：可以用后缀数组做，但是感觉比较麻烦，这里采用新学的一个manacher算法
(不会的可以移步http://blog.youkuaiyun.com/sin_xf/article/details/47271713)
manacher有一个好处就是会记录每个位置为中心的最长回文，那么我们只需要用这个找出所有第一个字符串和第三个字符串，]]></description><category></category></item><item><title><![CDATA[算法进阶之manacher算法 （求最长回文）]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47271713</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47271713</guid><author>sin_XF</author><pubDate>Tue, 04 Aug 2015 16:35:23 +0800</pubDate><description><![CDATA[前几天bestcode做到一道字符串的题目，需要O（n）的回文，正好看到网上的manacher算法，于是来学习一发


进入正题：
manacher算法


用法：一般用于求一个字符串的最大回文，操作过程中会记录以每个点为中心的回文半径，可用来进行其他操作
时间复杂度：O（n）
空间复杂度：记录字符串2*n，半径数组2*n


内容：
记p[i]为以i为中心的回文半径（a]]></description><category></category></item><item><title><![CDATA[HDU5335 Walk Out(dfs+递推)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47253047</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47253047</guid><author>sin_XF</author><pubDate>Mon, 03 Aug 2015 11:13:21 +0800</pubDate><description><![CDATA[题意：大致意思是给一个n*m的01矩阵，起点为左上方(1,1)，终点为右下方(n,m)，求从左上方到右下方字典序自小的路径，如果路径都为0，则输出0。


分析：首先字典序最小，先要满足路径最短，再满足路径的值最小，路径最短的毫无疑问是越靠下或者越靠右，而且如果路径的前面为0，则可以认为是以第一个非0的点的为起点。因此这题可以转化为：先找出以起点为中心的连续为零的集合，再在其中找出x+y最大]]></description><category></category></item><item><title><![CDATA[线段树模板及专题合集-----不断更新中]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47146359</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47146359</guid><author>sin_XF</author><pubDate>Thu, 30 Jul 2015 10:56:46 +0800</pubDate><description><![CDATA[之前学过一段时间的线段树，后来就没有再做了，上次比赛做到几道题居然都是线段树，而且渐渐发现线段树的适用性之广和重要性，而且之前学的不全面，于是决定重现学一遍线段树，顺便改一下之前的代码风格


一.单点更新
最典型的最基础的题目就是敌兵布阵了，题意大概是给n个数，然后3种操作：某个点的数加上x，某个点的数减去x，求[x，y]区间所有数的和。前两种操作都一样，只不过减去x相当于加上-x]]></description><category></category></item><item><title><![CDATA[HDU 5325 Crazy Bobo(深搜)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47129367</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47129367</guid><author>sin_XF</author><pubDate>Wed, 29 Jul 2015 16:22:07 +0800</pubDate><description><![CDATA[题意：给一个n，接着输入n个数，表示n个点的值，接着输入n-1条边形成一个生成树
问最大有多少个点的集合使得该集合内的所有点都满足如下：对于集合内点大小相邻的两个点，该两点之间经过的所有点的大小都小于该两点
eg  7
3 30 350 100 200 300 400
1 2 2 3 3 4 4 5 5 6 6 7
该无向图可表示为1——2——3——4——5——6——7
  取点6对于]]></description><category></category></item><item><title><![CDATA[HDU 5289 Assignment(单调队列)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47123623</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47123623</guid><author>sin_XF</author><pubDate>Wed, 29 Jul 2015 11:02:31 +0800</pubDate><description><![CDATA[题意：给T足数据，然后每组一个n和k，表示n个数，k表示最大允许的能力差，接下来n个数表示n个人的能力，求能力差在k之内的区间有几个


分析：维护一个区间的最大值和最小值，使得他们的差小于k，于是采用单调队列


普通单调队列做法：
#include
#include
#include
#include
using namespace std;
const int maxn = 1]]></description><category></category></item><item><title><![CDATA[HDU 5323 Solve this interesting problem(暴搜)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47122617</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47122617</guid><author>sin_XF</author><pubDate>Wed, 29 Jul 2015 10:02:11 +0800</pubDate><description><![CDATA[题意：给一个l,r，表示区间[l,r]，问是否存在区间为[0,n]的线段树的节点区间为[l,r]，如果有求最小的n，如果没有输出-1


分析：对于线段树而言，其中一段区间也就是一个节点可以有左节点或者右节点,而对于一个节点的左节点有两种情况：1.左节点的长度和该节点长度相同；
         2.左节点长度比该节点长度长1 
 同理，一个节点的右节点也有两种情况，与左节点正好相反：]]></description><category></category></item><item><title><![CDATA[HDU 5305 Friends(深搜)]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47101735</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47101735</guid><author>sin_XF</author><pubDate>Tue, 28 Jul 2015 10:37:15 +0800</pubDate><description><![CDATA[题意：t组数据，每组一个n和m表示点数和边数，接下来m条边，每条边两种状态，求每个点邻接边的两种状态数目相同的排列方式有几种


分析：从第一个顶点开始往下深搜每条边，每条边两种状态，注意回朔。


代码：
#include
#include
#include
#include
using namespace std;
const int maxn = 10;
int n,m,ans]]></description><category></category></item><item><title><![CDATA[hdu5313Bipartite Graph(二分图染色+DP(bitset优化))]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47080125</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47080125</guid><author>sin_XF</author><pubDate>Mon, 27 Jul 2015 09:34:17 +0800</pubDate><description><![CDATA[题意：给n个点m条边，问最多可以添加几条边使图为完全二分图


分析：如果二分图没有限制，看到是两边分别为n/2个点和n-n/2个点的最优，但是可
   能出现大于此点的情况，比如n=4,m=3,边为1 2,1 3,1 4.此时完全二分图边最
   多为3，所以要求得二分图左边或者右边可达到的离n/2最近的点数是多少为最 
   优解，于是采用染色分别求出各个联通快的2种颜色的各个点数]]></description><category></category></item><item><title><![CDATA[HDU5312 Sequence]]></title><link>https://blog.youkuaiyun.com/sin_XF/article/details/47067989</link><guid>https://blog.youkuaiyun.com/sin_XF/article/details/47067989</guid><author>sin_XF</author><pubDate>Sun, 26 Jul 2015 15:22:42 +0800</pubDate><description><![CDATA[题意：t组数据，每组数据给个m，问m最少能由几项形如3*n*(n-1)+1的数表示
eg 7=1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1);
     7=7(n=2);
     所以7最少能由1个数表示


分析：3*n*(n-1)+1可以转换为6*(n*(n-1)/2)+1,而n*(n-1)/2是一个三角形数，设为An，
  ]]></description><category></category></item></channel></rss>