<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hyc10的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hyc10</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hyc10]]></copyright><item><title><![CDATA[bzoj 2716 天使玩偶 CDQ分治]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/74035985</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/74035985</guid><author>hyc10</author><pubDate>Sat, 01 Jul 2017 11:01:20 +0800</pubDate><description><![CDATA[题意，平面内动态加点，每次查询距离目标点曼哈顿距离最短的点，与之的距离
考虑以查询点为原点，其左下角的点与之曼哈顿距离为dis=(x-x')+(y-y')=(x+y)-(x'+y')
因此，我们考虑求(x'+y')最大值
CDQ分治来解决此题
首先考虑将所有点，无论是目标点还是插入的点，按X坐标排序
再对于时间进行分治
对于分治后得到的两段，分别在内部再次按X坐标排序，
之后创建两个]]></description><category></category></item><item><title><![CDATA[bzoj 4411 USACO16FEB 负载平衡Load Balancing（扫描线，树状数组，三分答案，前缀和）]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/72867768</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/72867768</guid><author>hyc10</author><pubDate>Mon, 05 Jun 2017 15:26:53 +0800</pubDate><description><![CDATA[题意：
给你一个矩阵，里面有些点，让你横向切一刀，纵向切一刀，使得得到的四个区域内的最大的点数最少。

思路：
首先考虑对于n大小在1000左右，直接二维前缀和预处理，枚举后，O（1）计算答案
对于n=100000，二维开不下，考虑加入数据结构维护区间和
于是加入树状数组，考虑直接枚举竖着的直线的横坐标，每次枚举时不断向树状数组加点（点的纵坐标）
这样对于外层循环的每一个i，当前的树]]></description><category></category></item><item><title><![CDATA[2017 UESTC Training for Dynamic Programming  N 有限制的完全背包]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/72852382</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/72852382</guid><author>hyc10</author><pubDate>Sat, 03 Jun 2017 15:31:15 +0800</pubDate><description><![CDATA[题面：



N - 这是一道比CCCC简单题更有想象力的中档题




Time Limit: 9000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)



Submit 
Status


在2550年，CCCC已经成为了一场和ICPC一样正式的大型比赛
UESTC在那年]]></description><category></category></item><item><title><![CDATA[poj3233 等比矩阵二分求和]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/72566061</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/72566061</guid><author>hyc10</author><pubDate>Fri, 19 May 2017 21:11:23 +0800</pubDate><description><![CDATA[题意：给定矩阵A
求A+A^2+A^3+.......+A^k


如何转化
令SUM(k)==A+A^2+A^3+.......+A^k
则SUM(k)=(1 + A^(k/2) )   *  (A+A^2+A^3+.......+A^k)  +  A^k   (k为奇数)
          =(1 + A^(k/2) )   *  (A+A^2+A^3+.......+A^k)]]></description><category></category></item><item><title><![CDATA[poj1661 最短路]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/71104801</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/71104801</guid><author>hyc10</author><pubDate>Tue, 02 May 2017 22:31:52 +0800</pubDate><description><![CDATA[相当机智的一题，原本是放在DP专题里的题，思路一开始不是很清晰
看了网上dp解法后，感觉并不是很写的来
接着我开始想是否能暴力过去
于是很自然想到要构图，跑最短路了
每一层平台的左端点和右端点各自当做图中一个点
与其下方能到达的平台的左右端点相连
边权是高度差+水平差
建边时n^2暴力，起始点为0号点，地面为2*n+1号点
注意初始点连出去的边要单独处理
到地面的边要单独处理
]]></description><category></category></item><item><title><![CDATA[HDU 3401 + CDOJ 880 Trade + 生日礼物]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/70920452</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/70920452</guid><author>hyc10</author><pubDate>Fri, 28 Apr 2017 17:19:39 +0800</pubDate><description><![CDATA[题意：
本金无限，告诉你每天买入卖出的价格和买入卖出的最多总数
让你求n天之后，最多能赚多少
很容易想到DP方程：
dp[i][j]表示第 i 天，有 j 股的最大收益
1.dp[i][j]=max(dp[ i-1 ][ j ],dp[ k ][ t ]-(j-t)*inval[i])
( k
且 dp[i][j]=dp[k][t]+(t-j)*outval[ i ]
(k
然后]]></description><category></category></item><item><title><![CDATA[SCOI——很僵硬的总结]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/70182576</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/70182576</guid><author>hyc10</author><pubDate>Sat, 15 Apr 2017 09:30:05 +0800</pubDate><description><![CDATA[省选之后，发现自己还是很弱

Day 1
拿到t1的时候，能看出是贪心+树剖的，可是自己的树剖并不强力，自己掂量下，多半会挂，30暴力不忙打
于是看t2，感觉题好长。。但如果强行暴力小数据过过应该没问题吧，于是打了个真.暴搜。
看到t3的时候，心里其实一开始很开心，手推解析几何地敲了30的暴力，于是开始想想优化。然后推了4h，gg
0+0+10 很尴尬
Day 2
t1花0.5h读]]></description><category></category></item><item><title><![CDATA[POJ 2763 树链剖分+线段树维护区间和]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/70162877</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/70162877</guid><author>hyc10</author><pubDate>Thu, 13 Apr 2017 22:35:07 +0800</pubDate><description><![CDATA[这题是我第一次自己查错并且A掉的树剖模板题。
思路很简单，树剖后扔到线段树里就行了。
唯一困难点的是
1.题目给的是边权值，要转为点值，那么直接把值赋给连接边的两点中深度较大的一点
2.修改时，是给编号修改，为了方便，我直接开的几个数组来装边上的信息
//查了半天错，结果是线段树打错了个字母。。。
AC代码如下
#include 
#include 
#include 
#inclu]]></description><category></category></item><item><title><![CDATA[poj 3463 统计次短路条数+最短路条数]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/69549052</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/69549052</guid><author>hyc10</author><pubDate>Fri, 07 Apr 2017 14:52:19 +0800</pubDate><description><![CDATA[题意：给一个有向图，问从s到t的     最短路  和    比最短路距离长1的次短路 
思路：Dijkstra(不使用heap)
1.每次维护次短路和最短路的长度，与最短路和次短路的条数
最后输出结果的时候判断当前最短路和次短路的长度差是否为1
2.维护方法：
dis[i][0]：到点i的最短路长度  dis[i][1]：到i点的次短路长度
cnt[i][0]：到点i的最短路的路数 ]]></description><category></category></item><item><title><![CDATA[状态压缩 uva11795]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/69391951</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/69391951</guid><author>hyc10</author><pubDate>Thu, 06 Apr 2017 16:03:56 +0800</pubDate><description><![CDATA[题意：第一行数据总数
接下来输入机器人个数
再一行告诉你人能杀死哪些机器人，
再n行告诉你机器人的武器能怎么互相杀死


思路：状态压缩+dp
伪转移方程：dp【当前状态】=sum{dp[不杀死机器人i的状态]}，（其中i属于[0,n]）


批注比较多的代码
#include
using namespace std;
int attack[17];//每个机器人能杀死的其他]]></description><category></category></item><item><title><![CDATA[SPOJ LIS2 (Another Longest Increasing Subsequence Problem) CDQ求三维偏序+离散化+LIS]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/68943007</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/68943007</guid><author>hyc10</author><pubDate>Sat, 01 Apr 2017 12:05:55 +0800</pubDate><description><![CDATA[题意：
给n个点的坐标，求最长上升子序列（两个点之间的大于关系是满足同时x，y坐标都大于）
思路：
加上序号，一个点上有三个信息，那么是一个三维偏序+LIS的问题
使用CDQ分治：一维排序，一维分治，一维树状数组维护
由于这里的序号一定是有序的，那么不用第一维的排序
因为是LIS问题，dp[i]=max(dp[j],dp[i])（j
这里的max用树状数组维护前缀最大值
注意x，y]]></description><category></category></item><item><title><![CDATA[HDU4006 求集合第K大数（线段树+离散化）]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/68923689</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/68923689</guid><author>hyc10</author><pubDate>Fri, 31 Mar 2017 12:17:37 +0800</pubDate><description><![CDATA[题意：
输入 I 表示在集合中插入一个数，Q表示询问当前集合中第k大数
思路：
1.树状数组加二分，可是这个算法是n(logn)^2的，对于1e6肯定TLE，
但是树状数组有一个求区间第k大的黑科技，可以自己搜一下。
2.由于本蒟篛希望能练练线段树，于是本题我用线段树
首先嘛，我不确定加入集合的数的大小范围（题目似乎没给？？）
于是，果断先把修改和询问先离线下来再  离散一波！
接]]></description><category></category></item><item><title><![CDATA[HDU3974 线段树区间修改单点查询+树上dfs序]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/68501605</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/68501605</guid><author>hyc10</author><pubDate>Thu, 30 Mar 2017 21:10:03 +0800</pubDate><description><![CDATA[题意：给一棵树，每次修改这棵树的一个子树，求单点的值；
思路：把树上的每个点映射到线段上！
映射方法：dfs遍历序号，对于原来树上的每个序号，记录它的子树中dfs序号最小的和最大的，每次区间修改时，直接修改从最小序号到最大序号的区间。
代码：
/*
	最怕一生碌碌无为，还说平凡难能可贵。
*/
#include
#define INF 50010
using namespace std;
]]></description><category></category></item><item><title><![CDATA[HDU1540  树状数组+二分]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/68197276</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/68197276</guid><author>hyc10</author><pubDate>Wed, 29 Mar 2017 22:24:52 +0800</pubDate><description><![CDATA[题意：
有一串1，现在 D i 表示将第i个位置的点修改成0，R表示把最晚修改的一个数恢复成0，Q i表示询问包含第i个数在内的最长1串的长度
思路：
网上的代码大多用线段树维护连续区间的左右端点，本蒟篛并不是很理解。
我的方法是，两次二分，分别把第i个数的左部分最长1串的长度和第i个数右部分最长1串的长度求出，
其中二分的判断方式是区间和是否为区间长度，区间和用树状数组维护。
特别注]]></description><category></category></item><item><title><![CDATA[HDU4027 线段树修改]]></title><link>https://blog.youkuaiyun.com/hyc10/article/details/66970433</link><guid>https://blog.youkuaiyun.com/hyc10/article/details/66970433</guid><author>hyc10</author><pubDate>Mon, 27 Mar 2017 12:48:08 +0800</pubDate><description><![CDATA[题意：区间开根+区间求和
思路：线段树比较基础题型，对于我这种新手很不错！
一开始有个想法，就用普通懒标记记录区间更改值，然而仔细想下，这样一定会更新到线段树的最底层，那么等于暴力，TLE无疑。
于是发现题目给了信息：每个数小于2^63，意味着每个数最多被开8次根
于是有两个想法
1.lazy标记记录开根次数，如果大于8直接返回；
2.当区间和==区间长度时（全为1时），直接返回；
]]></description><category></category></item></channel></rss>