<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[two_big_monkey的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/two_big_monkey</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; two_big_monkey]]></copyright><item><title><![CDATA[关于主席树]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123703887</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123703887</guid><author>two_big_monkey</author><pubDate>Thu, 24 Mar 2022 10:12:23 +0800</pubDate><description><![CDATA[什么是主席树？
主席树又叫做可持久化线段树，其实后者才是它的大名只是大家都图方便就叫前者了。
可持久化线段树，一听名字就知道它的两个终点：可持久化，线段树。
都要学主席树了，线段树是什么总归都知道的吧，那什么是可持久化呢？
可持久化理解起来其实也很简单，说白了就是可以查询历史节点就可以叫可持久化了，所以可持久化线段树的意思就是可以查询线段树的历史节点就是可持久化了。
如何实现可持久化？
我们这边先给出一棵线段树吧。

画的不好，大家理解一下就行了
假设说我现在想要单点修改最左边的叶子节点
在这里插入图片描述]]></description><category></category></item><item><title><![CDATA[关于反向建图（通过牛客菜肴制作制作来看）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123670148</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123670148</guid><author>two_big_monkey</author><pubDate>Tue, 22 Mar 2022 20:12:25 +0800</pubDate><description><![CDATA[随便说点
从我刚开始学习图论开始就听说过反向建图，但考虑到当时我能力有限，并且那些反向建图的题正向建图似乎也可以做，所以就没太在意。今天在刷牛客题单时候又碰到了类似的题就来整理一下。
题意
有nnn个任务，做任务时候有先后顺序。同时当你做完111号任务之后优先做222号任务。
题解
第一眼见到这题时候就知道是要topotopotopo，因为没有认真读题，直接topotopotopo板子往上面套，样例都过不了。发现111号节点之后要强制222号节点先行，然后就开始构思正向建图的解法（图论菜鸡，真的想不到反向建]]></description><category></category></item><item><title><![CDATA[2019浙江省赛]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123643631</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123643631</guid><author>two_big_monkey</author><pubDate>Mon, 21 Mar 2022 19:23:34 +0800</pubDate><description><![CDATA[B.&nbsp;Element&nbsp;SwappingB.\ Element\ SwappingB.&nbsp;Element&nbsp;Swapping
题意
有nnn个数字现在交换了两个数字，给你交换前的序列的相关信息为x=∑i=1ni∗ai,y=∑i=1ni∗ai∗aix=\sum _{i=1}^{n}i*a_i,y =\sum^n_{i=1}i*a_i*a_ix=∑i=1n​i∗ai​,y=∑i=1n​i∗ai​∗ai​。现在请问你最多有多少种交换方式？
题解
这题主要是一个数学的推导题，具体的]]></description><category></category></item><item><title><![CDATA[Codeforces Global Round 14]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123534573</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123534573</guid><author>two_big_monkey</author><pubDate>Wed, 16 Mar 2022 19:58:24 +0800</pubDate><description><![CDATA[C. Phoenix and Towers
题意
有nnn个石堆，有高度hih_ihi​将它们垒成塔。现在我们要将他们合并搭建成mmm个塔，请问能否使任意两座塔之间的高度差距小于等于xxx。
题解
用优先队列小根堆维护。先将堆顶的元素弹出和当前读到的数据合并然后再放入优先队列即可。
#include&lt;bits/stdc++.h&gt;
using namespace std;
#define inf 0x3f3f3f3f
void solve(){
    
    int n, m, x;
    ]]></description><category></category></item><item><title><![CDATA[Closest Equals（代码源打卡day.12）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123389975</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123389975</guid><author>two_big_monkey</author><pubDate>Wed, 09 Mar 2022 23:00:57 +0800</pubDate><description><![CDATA[随便说点
鸽了好几天之后继续更新每日一题。今天的是离线线段树，区间修改单点查询，当然也有大佬有很多奇奇怪怪的做法，考虑到我比较菜就不多瞎逼逼了。
今天写这篇题解主要还是要纪念一下我一次使用tagtagtag来维护线段树，一个下午写了一道板子，晚上重构代码，最后还叫大佬帮我对拍，过程不可谓不艰难，不过好在最后还是找到了bugbugbug写完了。
题意
给出一个序列aaa询问区间内最接近的两个相同的数字之间的距离是多少。
题解
如果是采用最暴力的方法肯定是直接遍历每一次询问，然后暴力找出最近的相同的数字，如果稍]]></description><category></category></item><item><title><![CDATA[Outer space invaders（代码源div.1 P5）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123329729</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123329729</guid><author>two_big_monkey</author><pubDate>Mon, 07 Mar 2022 14:30:06 +0800</pubDate><description><![CDATA[随便说点
终于算是把代码源上周div.1div.1div.1的题目写完了，虽然后面两题有很严重的作弊嫌疑（看了蜗老师的代码），但也算是懂大致的原理。不得不感慨大佬们的代码居然能如此简练，以至于我抄起来那么方便。
这题通过蜗老师的代码也给我提供了一种新的写区间dpdpdp的思路——用记忆化搜索来写区间dpdpdp。在此之前我写过一篇博客讲述了从暴搜到dpdpdp的一个思路过程，不过后来仔细想来感觉那好像只适用于记忆化搜索的分析，今天做到这题算是给了我一个新的思路——是不是所有的或者一些dpdpdp能够转化成记]]></description><category></category></item><item><title><![CDATA[Paint（代码源div.1 P4）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123323614</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123323614</guid><author>two_big_monkey</author><pubDate>Mon, 07 Mar 2022 10:02:12 +0800</pubDate><description><![CDATA[随便说点
这周继续补namomonamomonamomo上周的题（苣蒻落泪）。之前在AcwingAcwingAcwing上面学过区间dpdpdp但多少有点板子题的感觉，这题算是给了一个新的切入点。看完题解之后才发现自己怎么这么简单的题目都不会做（苣蒻二落泪）。
题意
给出一个数组，一次操作可以将某一个位置相邻的连续的数字全部转化为另一个相同的数字。请问最少需要操作多少次可以使数组中所有数字相同？
题解
拿到这题我们首先能够明确一个很简单的事实：最多经过n−1n-1n−1次操作我们就能达到我们需要的目标，也就]]></description><category></category></item><item><title><![CDATA[Towers（代码源div.1 P2）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123273482</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123273482</guid><author>two_big_monkey</author><pubDate>Fri, 04 Mar 2022 11:45:38 +0800</pubDate><description><![CDATA[题意
现在有一棵树，这棵树上每个点有一个权值xxx，现在想要在一些点上增加一个权值yyy。希望任何一个点的权值xxx能够在一条路上这条路上两个端点的权值yyy都大于等于xxx。请问权值yyy总和最小是多少？
题解
先明确一个简单的定理：需要增加权值yyy的点一定是叶子节点。
证明：叶子节点作为整棵树的端点一定要增加权值yyy。如果在叶子节点之外的节点有一个点也增加了权值yyy，那么分为两种情况。一种情况是叶子节点的yyy大于等于当前节点的xxx值，这种情况下增加当前节点的yyy值没有意义；另一种情况是叶子节]]></description><category></category></item><item><title><![CDATA[2021浙江省赛]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123272342</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123272342</guid><author>two_big_monkey</author><pubDate>Fri, 04 Mar 2022 11:10:42 +0800</pubDate><description><![CDATA[随便说点
集训队为了备战省赛开了一场VPVPVP，总的来说结果还是不错的，一个小时连写555题直接就上了铜牌线，算是比较开心的吧。
A. League of Legends
题意
红蓝队伍每个队伍555个人，每个人有血量，蓝队先攻击，每次攻击受击对象减少一点体力，请问哪个队伍会赢。
题解
两个队伍血量分别相加然后比大小，相等的情况下蓝队赢，不相等谁的血量高谁赢。
void MAIN(){
    int sum1=0,sum2=0;
    for(int i=1;i&lt;=5;i++){
       ]]></description><category></category></item><item><title><![CDATA[Crystalfly（代码源div.1 P1）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123262826</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123262826</guid><author>two_big_monkey</author><pubDate>Thu, 03 Mar 2022 20:16:30 +0800</pubDate><description><![CDATA[CrystalflyCrystalflyCrystalfly（代码源div.1div.1div.1 week.1week.1week.1 P1P1P1）
随便讲点
本来是想所有题目做完后一次性写一篇的，没想到div.1div.1div.1那么狠，很多题虽然知道思路但总是AAA不了，总而言之还是自己太菜了。
这题是南京站的铜牌题，赛场上面感觉自己差点写出来，后来看一下其实还是有点差距的，如果当时能再多给我一个小时调代码还是有可能的。或许是因为赛场上面花了太多的时间和精力，后来补这题时候多少有点心理阴影，写了很]]></description><category></category></item><item><title><![CDATA[数数（代码源打卡day.6）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123261923</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123261923</guid><author>two_big_monkey</author><pubDate>Thu, 03 Mar 2022 19:32:16 +0800</pubDate><description><![CDATA[随便说点
这题开始时候想的是线段树（不知道为什么这两天的题我都想到要用线段树来做），后来想想是错的，但还是强行冲了一发，居然AAA了。后来出了一个后台数据，交到官方去了，不知道他们什么时候会加进去。
再讲一下题，这题用的是树状数组，当然也可以用线段树，算是让我这个数据结构白痴学习了一下数据结构的内容。
题意
给出一个数组，有qqq次询问，每次询问输出某个区间内小于等于xxx的数的数量。
题解
首先我们先明确一个前缀和的思想。题目问的是[l,r][l,r][l,r]区间内有多少数字符合条件，我们可以将其转化为]]></description><category></category></item><item><title><![CDATA[序列操作（代码源打卡day.5）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123261377</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123261377</guid><author>two_big_monkey</author><pubDate>Thu, 03 Mar 2022 19:00:37 +0800</pubDate><description><![CDATA[随便说点
昨天晚上AAA的，不过因为有点晚了就没写博客，今晚一起写了。
题意
给出一个序列，有两种操作，一种是将节点xxx更改为更改为yyy，另一种是将所有小于yyy的位置更改为yyy。
题解
开始时候想的是线段树，不过后来一直没动手，要是谁感觉合适可以试一下，下面讲一下我听蜗老师讲的思路。
一个位置可能有很多次单点修改，在最后一次单点修改之前无论做什么操作都没有意义。同时，在没有单点修改的情况下，一连串连续的第二类操作只有值最大的那个才有意义。所以我们只要关注每个位置最后一次被修改的值以及被修改之后的所有]]></description><category></category></item><item><title><![CDATA[选数（代码源打卡day.4）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123199599</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123199599</guid><author>two_big_monkey</author><pubDate>Tue, 01 Mar 2022 10:20:47 +0800</pubDate><description><![CDATA[题意
有nnn个数字其中选择任意多个使得他们的和%n=0\%n=0%n=0，输出这个方案。
题解
使用鸽笼原理。1∼n1\sim n1∼n个数字相加总有两个结果的模数是相等的。
我们只要用前缀和，每求出前nnn个数字的和，将它们存进mapmapmap，下次找到相同的模数的时候直接输出这个区间就行了。
map&lt;int,int&gt; mp;//数字 位置
void output(int l,int r){
    cout&lt;&lt;r-l+1&lt;&lt;endl;
    for(int i=]]></description><category></category></item><item><title><![CDATA[Dis（代码源打卡day.3）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123191188</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123191188</guid><author>two_big_monkey</author><pubDate>Mon, 28 Feb 2022 20:21:59 +0800</pubDate><description><![CDATA[随便说点
今天代码源大放水就出了个lcalcalca+前缀和板子题，可惜lcalcalca板子记错了，wawawa了好久。
题意
有一棵树，上面有很多个节点，每个节点都有一个对应的权值，现在有qqq次询问，问任意两点之间简单路径的权值亦或和。
题解
其实很简单，先dfsdfsdfs求前缀和，然后将询问的两点的前缀和亦或因为根节点到公共祖先的权值会被亦或两次而抵消所以我们只要再找一个公共祖先就行了。lcalcalca找到两点公共祖先，亦或上公共祖先的权值直接ACACAC。（直接ACACAC的前提是你没记错lc]]></description><category></category></item><item><title><![CDATA[no crossing（代码源打卡day.2）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123177237</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123177237</guid><author>two_big_monkey</author><pubDate>Mon, 28 Feb 2022 10:40:58 +0800</pubDate><description><![CDATA[随便说说
昨天集训队开省赛VPVPVP，写完每日一题已经很晚了，今天一早来补一下。
题意
在一条数轴上有很多条单向路径，每条单向路径都有一个对应的权值。有一个人现在从数轴上任意一点出发，他经过且仅经过kkk个点，要求当他经过一条路径时候不能越过之前已经经过过的点，请问他经过的路径的权值最小是多少？
题解
先说一下杜老师的思路。我们会发现因为不能越过已经越过的点，所以我们最后能够选择的路径长度是越来越短的，那么我们其实就可以利用区间dpdpdp将小区间转移出来来得出最后答案，可惜代码能力太差最后还是没ACAC]]></description><category></category></item><item><title><![CDATA[斜率优化dp总结（AcWing任务安排123题解）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123154667</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123154667</guid><author>two_big_monkey</author><pubDate>Sat, 26 Feb 2022 19:38:26 +0800</pubDate><description><![CDATA[斜率优化dpdpdp总结（AcWingAcWingAcWing任务安排123123123题解）
感想
前两天在AcwingAcwingAcwing学的斜率优化dpdpdp，当天是学的差点自闭，今天正好有空就抽点时间出来总结一下。任务安排123123123是acwingacwingacwing中用来讲解斜率优化dpdpdp时候用到的三道例题，其中111的数据比较弱，可以直接用普通dpdpdp做出来，222就是标准的斜率优化dpdpdp的板子，把111的结论直接套板子就能写了，333是在222的基础上再一次加强]]></description><category></category></item><item><title><![CDATA[Imbalanced Array（代码源打卡day.1）]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123150340</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123150340</guid><author>two_big_monkey</author><pubDate>Sat, 26 Feb 2022 15:11:22 +0800</pubDate><description><![CDATA[做题感想
不得不感慨代码源div.1div.1div.1真的是大佬的世界，第一天每日一题就已经冲到了codeforces&nbsp;1900codeforces\ 1900codeforces&nbsp;1900的水平了，不过通过这题学习了一下单调栈的运用我觉得倒也不错。
题意
给出一个数组求出所有子区间最大值和最小值的差值的和。
题解
这里我们将最大值和最小值分开看，所有子区间最大值和最小值差值的和我们也能够认为是所有子区间最大值的和和所有子区间最小值的和的差值，而子区间的最值必定是数组中的某一个数字并且]]></description><category></category></item><item><title><![CDATA[Codeforces Round #773 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/two_big_monkey/article/details/123141892</link><guid>https://blog.youkuaiyun.com/two_big_monkey/article/details/123141892</guid><author>two_big_monkey</author><pubDate>Fri, 25 Feb 2022 21:56:17 +0800</pubDate><description><![CDATA[Codeforces Round #773 (Div. 2)
赛后总结
这场是第二天开的一场VPVPVP，赛时写了快速AAA了三题，DDD题写了一个多小时过不了，不得不感叹div.1div.1div.1三题大佬的强大。
这边也祝贺我校第一个橙名大佬（XSamsara）的诞生。
A. Hard Way
签到，但卡题意。
题意
有一个三角形，给出三个点的坐标，给出不能由y=0y=0y=0上任意一点在不穿过三角形的情况下不能够到达的边的长度。
题解
这里给出一个三角形，我们能够确定的是更加靠近y=0y=0y=0的]]></description><category></category></item></channel></rss>