<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[varinic 的博客]]></title><description><![CDATA[弱弱弱]]></description><link>https://blog.youkuaiyun.com/Mtrix</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Mtrix]]></copyright><item><title><![CDATA[ecnu 电话送报  贪心]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/73987132</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/73987132</guid><author>Mtrix</author><pubDate>Fri, 30 Jun 2017 12:47:09 +0800</pubDate><description><![CDATA[在一条直线上分布着 n 户人家，你是邮局的送报员（邮局的坐标为 0），你的工作是每天早上要给所有人送报。

一种方案是你亲自去给人家送，你要走过去并且走回来，可以在沿途上送多户人家的报纸，需要花费一定的（骑车）时间；另一种方案是你打电话让人家来拿，但打电话也需要花费一定的时间，并且你不能同时给多户人家打电话，打完电话后该户的报纸可以被视为已经送完。求你需要花在这份工作上的最短时间。
假设自行]]></description><category></category></item><item><title><![CDATA[ecnu 核反应控制 数学]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/73984591</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/73984591</guid><author>Mtrix</author><pubDate>Fri, 30 Jun 2017 12:24:28 +0800</pubDate><description><![CDATA[著名物理学家 Daffy Duck 提出了核反应控制的关键理论。


该理论的（玄学）表述是：在一个原子堆中有很多原子量不同的原子，如果原子 A 的原子量和原子 B 的原子量之和，恰好等于原子 C 的原子量，那么核反应控制难度将急剧增大。
该理论的（数学）表述是：有集合 A={a1,a2,…,an}，如果存在 i,j,k(i≠j,i≠k,j≠k) 使得 ai+aj=ak，则输出 NO；否则]]></description><category></category></item><item><title><![CDATA[ecnu 故事 数学]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/73927665</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/73927665</guid><author>Mtrix</author><pubDate>Thu, 29 Jun 2017 20:13:20 +0800</pubDate><description><![CDATA[由于你瞬间解决了小强多年以来的烦恼，小强十分高兴，于是他给大家讲了一个故事：“ 传说从前有个叫舍罕的印度国王，因为他的宰相发明了国际象棋，打算予以奖赏一番。国王问宰相想要什么，宰相对国王说：‘ 陛下，请您在这个棋盘的第一个格子里赏给我 1 粒麦子，在第二个格子里给 2 粒，第三个给 4 粒，以后每一个格子都比前一个多 1 倍，请您将这个棋盘上的 64 个格子全部摆满。’ 国王没宰相会算账，所以当即]]></description><category></category></item><item><title><![CDATA[C++ 11 thread join detach move swap]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/67640573</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/67640573</guid><author>Mtrix</author><pubDate>Tue, 28 Mar 2017 20:30:04 +0800</pubDate><description><![CDATA[刚自学了thread发现网上的资料比较分散，现在这里统一整理一下，不是很深入，只介绍一般用法。
首先创建thread对象：
 
一般某一线程B是由其主进程A创建的。除了创建，A还要负责B的回收，回收的操作就是join()，意即B加入到A中被回收，可以推测join()操作只有一次。如果A在程序某处有B.join()，则A进程会阻塞，直到B进程结束，A才继续执行。
如果线程A既希望被创建的线程]]></description><category></category></item><item><title><![CDATA[hihocoder 1479  三等分 树型dp]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/62897265</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/62897265</guid><author>Mtrix</author><pubDate>Fri, 17 Mar 2017 20:30:51 +0800</pubDate><description><![CDATA[描述
小Hi最近参加了一场比赛，这场比赛中小Hi被要求将一棵树拆成3份，使得每一份中所有节点的权值和相等。
比赛结束后，小Hi发现虽然大家得到的树几乎一模一样，但是每个人的方法都有所不同。于是小Hi希望知道，对于一棵给定的有根树，在选取其中2个非根节点并将它们与它们的父亲节点分开后，所形成的三棵子树的节点权值之和能够两两相等的方案有多少种。
两种方案被看做不同的方案，当且仅当形成方案的2个节]]></description><category></category></item><item><title><![CDATA[hihoCoder 1478   水陆距离]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/62895873</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/62895873</guid><author>Mtrix</author><pubDate>Fri, 17 Mar 2017 19:47:45 +0800</pubDate><description><![CDATA[描述
给定一个N x M的01矩阵，其中1表示陆地，0表示水域。对于每一个位置，求出它距离最近的水域的距离是多少。  
矩阵中每个位置与它上下左右相邻的格子距离为1。
输入
第一行包含两个整数，N和M。 
以下N行每行M个0或者1，代表地图。
数据保证至少有1块水域。
对于30%的数据，1 
对于100%的数据，1 
输出
输出N行，每行M个空格分隔的整数。每个整数表示该位置距]]></description><category></category></item><item><title><![CDATA[ACM 利用位运算枚举所有子集]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/61200302</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/61200302</guid><author>Mtrix</author><pubDate>Fri, 10 Mar 2017 17:00:08 +0800</pubDate><description><![CDATA[给集合里的元素一个顺序，那么就可以用整数表示集合，某一位为1表示对应元素被选取。
        设x为表示集合的整数，那么这个整数有如下性质：
         x的子集整数y在数值上不会比x大。因为x的子集y只是保留了x某些位置上的1，所以y总可以加上一个非负的整数z等于x，相当于把没选的1补上。
         根据这个性质可知，可以通过枚举所有比x小的数p并判断，p是否只含x对应位]]></description><category></category></item><item><title><![CDATA[Raft动画演示]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/54586053</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/54586053</guid><author>Mtrix</author><pubDate>Tue, 17 Jan 2017 19:46:02 +0800</pubDate><description><![CDATA[分享一个Raft动画演示网站：     
http://thesecretlivesofdata.com/raft/


包括 选举（Leader Election）、复写（log replication）、分区（partition）]]></description><category></category></item><item><title><![CDATA[总线仲裁之计数器定时查询]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/53954402</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/53954402</guid><author>Mtrix</author><pubDate>Sat, 31 Dec 2016 11:38:08 +0800</pubDate><description><![CDATA[总线仲裁中集中式仲裁有一个计数器定时仲裁，看书的时候没弄懂。网上看了公开课算弄明白了。

其实很简单，我们来看看它的工作过程：
  假设总线仲裁器中计数初值为0，这时设备2、4都通过BR线发出请求，如果设备不忙既BS为0，计数器开始从0计数。
并通过设备地址线查看该设备是否发出请求，如果是，则响应否则继续计数。这里设备0没有请求，继续计数直至2，
发现设备2有请求则响应，并将BS线设为1]]></description><category></category></item><item><title><![CDATA[hihoCoder - 1116 - 计算 （线段树区间合并）]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52662358</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52662358</guid><author>Mtrix</author><pubDate>Sun, 25 Sep 2016 15:32:31 +0800</pubDate><description><![CDATA[线段树区间合并的题目套路就是每一段维护
1.当前段的答案data[k]，
2.当前段所有前缀Left[k]
3.当前段所有后缀Right[k]
合并时由当前段的左右子节点的data转移当前段，
还有左子节点的后缀与右子节点的前缀合并形成的区间对当前段的贡献。
然后维护当前段Left,Right就ok了。

现在很少看见用vect或者map维护每一段前后缀的了（我会说是跑的太慢了吗）]]></description><category></category></item><item><title><![CDATA[hdu 5884 Sort   k叉哈夫曼树+双队列优化]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52564849</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52564849</guid><author>Mtrix</author><pubDate>Sat, 17 Sep 2016 20:17:21 +0800</pubDate><description><![CDATA[Problem Description
Recently, Bob has just learnt a naive sorting algorithm: merge sort. Now, Bob receives a task from Alice.
Alice will give Bob N
 sorted sequences, and the i-th
 sequence includ]]></description><category></category></item><item><title><![CDATA[HYSBZ 1067 RMQ]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52556087</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52556087</guid><author>Mtrix</author><pubDate>Fri, 16 Sep 2016 15:44:09 +0800</pubDate><description><![CDATA[题意很清楚，坑点就是l或是r不存在时，要二分去找临近位置，然后统计这之间的max。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=2e5;
map mp;
/*
数组下标从1到n，询问[l,r]最小值
*/
int a[ma]]></description><category></category></item><item><title><![CDATA[poj 3368 统计区间出现次数最多数个数  RMQ]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52555264</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52555264</guid><author>Mtrix</author><pubDate>Fri, 16 Sep 2016 14:08:09 +0800</pubDate><description><![CDATA[对上升序列如：1 1 2 2 2 3 3 4 5 5 ....... 统计区间出现次数最多数个数。
我们可以构造一个b[]数组，
if（a[i]==a[i-1]）b[i]=b[i-1]+1;
else b[i]=1;
这样对上述例子，b[]数组有1 2 1 2 3 1 2 1 1 2
那么对询问区间[l,r]，如果l在数与数交界处，那么直接查询l,r区间最大值。
否则要知道与a[l]相]]></description><category></category></item><item><title><![CDATA[hdu 5875 Function 二分+rmq]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52528312</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52528312</guid><author>Mtrix</author><pubDate>Tue, 13 Sep 2016 18:52:49 +0800</pubDate><description><![CDATA[按照题意每次到当前点右边找比当前点小并且最接近当前点的点p。
如果你能在O（1）的时间里查询[l,r]区间最小值，那么就可以二分查找p。


#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=100000+5;
int a[maxn];
int dp]]></description><category></category></item><item><title><![CDATA[hdu 5869 Different GCD Subarray Query 离线+树状数组]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52526815</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52526815</guid><author>Mtrix</author><pubDate>Tue, 13 Sep 2016 16:38:00 +0800</pubDate><description><![CDATA[题意：给你n个数，每次查询[l,r]区间里所有子区间不同gcd的个数。
我们先来看如何查询区间不同数的个数： spoj D-query 区间不同数个数 主席树||离线+树状数组


上面这道题讨论的是单个点，既对答案有贡献的是单个点，而这里是子区间要怎么处理。
同理，对每个gcd有多个子区间，定义子区间左端点为子区间大小，那么只有最大的那个子区间才是有效的。

这里还要用到gcd性质]]></description><category></category></item><item><title><![CDATA[varinic的模板]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52454038</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52454038</guid><author>Mtrix</author><pubDate>Tue, 06 Sep 2016 21:48:34 +0800</pubDate><description><![CDATA[这里是varinic的模板


字符串处理

1.KMP
/*
pku3461(Oulipo), hdu1711(Number Sequence)
这个模板 字符串是从0开始的
Next数组是从1开始的
*/
#include 
#include 
using namespace std;

const int N = 1000002;
int next[N];
char S[N], T[N]]></description><category></category></item><item><title><![CDATA[poj 3667 Hotel 线段树区间合并]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52413200</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52413200</guid><author>Mtrix</author><pubDate>Fri, 02 Sep 2016 13:40:15 +0800</pubDate><description><![CDATA[至此，扫描线，线段树区间修改更新，可持久化线段树，线段树区间合并 等线段树题目全部过了一遍。
接下来还有好多高级数据结构等着我去学。
trick：线段树区间合并时，cover只需一个，因为一段区间只能处于一种状态，我作死开了两个cover分别对应两种情况，
好处是一目了然，坏处是更新完一个cover还要更新另一个，（因为一段区间只能处于一种状态） QAQ 



#include 
]]></description><category></category></item><item><title><![CDATA[hdu 5790 prefix  主席树]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52402248</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52402248</guid><author>Mtrix</author><pubDate>Thu, 01 Sep 2016 18:07:07 +0800</pubDate><description><![CDATA[这道题目其实和 spoj上的d-query 差不多  
http://blog.youkuaiyun.com/mtrix/article/details/52335617，
本质都是统计连续区间不同数个数，本来有 离线+树状数组 和在线主席树 两种做法，
这里强制在线那就主席树，对每个前缀要判断它有没有出现过可以用hash也可以字典树。


#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[spoj D-query  区间不同数个数  主席树||离线+树状数组]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52335617</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52335617</guid><author>Mtrix</author><pubDate>Sat, 27 Aug 2016 16:45:25 +0800</pubDate><description><![CDATA[把区间统计转化为前缀和，这里的前缀和不是普通的前缀和，对相同的ai，只有最右边那个才是有效的。
举个栗子：1 2 2 1 3 这样一个序列有效是这个样子 * * 2 1 3 ，因为1在后面出现过所以前一个无效，同理 2。前缀和则是0 0 1 2 3 ，那么对区间[1,5],[2,5],[3,5],[4,5],..[x,5] 我们都可以用sum[5]-sum[x-1]来求。
这里的一个问题是前缀]]></description><category></category></item><item><title><![CDATA[主席树 poj 2104 K-th Number]]></title><link>https://blog.youkuaiyun.com/Mtrix/article/details/52329999</link><guid>https://blog.youkuaiyun.com/Mtrix/article/details/52329999</guid><author>Mtrix</author><pubDate>Fri, 26 Aug 2016 17:55:45 +0800</pubDate><description><![CDATA[主席树又名可持久化线段树。
我们先撇开可持久化看看主席树是怎么实现的。维护一个长度为n的序列，我们可以建一颗线段树来维护，最上的根节点代表的区间是[1,n]。
我们知道线段树的形态由你给的[l，r]，既维护的区间长度决定，现在我要为这个序列的每一个前缀建一棵线段树，每一棵线段树最上的根节点代表的区间依然是[1,n]，所以这n棵线段树的结构是一模一样的。

这里的线段树不是普通的线段树而是权]]></description><category></category></item></channel></rss>