<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[binggui2的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/binggui2</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; binggui2]]></copyright><item><title><![CDATA[2021 icpc 南京 h 树形dp]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/122394855</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/122394855</guid><author>binggui2</author><pubDate>Sun, 09 Jan 2022 16:06:51 +0800</pubDate><description><![CDATA[代码中第55行那个位置我没想到，导致wa了几发。
这个题被卡在了t=3的讨论上面，其实把式子推出来发现只和最大值有关系，最大值必选。
子节点的选择和子节点为头节点的子树的选择无关。
#include &lt;bits/stdc++.h&gt;
using namespace std;
#define ll long long

const int N = 1e5+10, M = 2*N;

int n;
int h[N], ne[M], e[M], idx;
ll a[N], t[N];
ll sum[N]]]></description><category></category></item><item><title><![CDATA[2019 icpc ecfinal H.King 思维 模拟 随机数]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/122394832</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/122394832</guid><author>binggui2</author><pubDate>Sun, 09 Jan 2022 16:05:25 +0800</pubDate><description><![CDATA[一个思维题，切入点是n/2
写代码后交疯狂wa18，然后发现rand函数的上限是32767，太小了，换了一个随机数就过了。
#include &lt;bits/stdc++.h&gt;
using namespace std;
#define ll long long
const int N = 200020;

int n, mod;

std::mt19937 rnd(time(0));
int a[N];

ll qmi(ll a, int k) {
    ll res = 1;
    while]]></description><category></category></item><item><title><![CDATA[2018 ccpc final]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/121170523</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/121170523</guid><author>binggui2</author><pubDate>Fri, 05 Nov 2021 20:53:29 +0800</pubDate><description><![CDATA[B. Balance of the Force
上来不难想到如何判impossible 以及划分成多个连通块
可跨连通块之间的选法如何选择呢 比赛的时候没想出来
其实是对于每个连通块来说 最大值进行排序 实时模拟最小值都有谁 如果符合题目中给出的连通块个数 那么更新答案即可
#include &lt;bits/stdc++.h&gt;
using namespace std;

const int N = 200020, M = 2 * N;
#define lson l, m, rt&lt;&lt;1
#]]></description><category></category></item><item><title><![CDATA[2020ccpc秦皇岛 K - Kingdom‘s Power]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/121144382</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/121144382</guid><author>binggui2</author><pubDate>Thu, 04 Nov 2021 15:55:15 +0800</pubDate><description><![CDATA[K - Kingdom’s Power
比赛的时候思路出了 但不会证。
赛后敲了就过了。
#include &lt;bits/stdc++.h&gt;
using namespace std;

const int N = 1000010;
#define ll long long
int n;

vector &lt;pair&lt;int, int&gt;&gt; tr[N];
int depth[N];
int val[N];

int dfs1(int u, int dep) {
    if(tr]]></description><category></category></item><item><title><![CDATA[CF 700 (Div.2) C 二分]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/121102054</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/121102054</guid><author>binggui2</author><pubDate>Tue, 02 Nov 2021 15:49:05 +0800</pubDate><description><![CDATA[Searching Local Minimum
非常有意思的一个二分题
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;
using namespace std;

const int N = 100010;

int n;
int a[N];

void er(){
    int ml, mL;
    int l = 1, r = n;
    while(l &lt; r) {
        int]]></description><category></category></item><item><title><![CDATA[2021ccpc网络赛重赛题解]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/120958124</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/120958124</guid><author>binggui2</author><pubDate>Mon, 25 Oct 2021 19:09:43 +0800</pubDate><description><![CDATA[B Kanade Doesn’t Want to Learn CG
比赛的时候是别人写的，想了一种其他的判法，就写了一下
直接判断点和抛物线的关系就行
这个题得注意一点 球可以碰到篮板的上沿
#include &lt;bits/stdc++.h&gt;
using namespace std;
#define ll long long

struct point{
    ll x, y;
};
struct line{
    ll a, b, c;
    int num(point P){
     ]]></description><category></category></item><item><title><![CDATA[2021牛客多校第七场 F trees 主席树维护dfs序 每个节点都是一个图]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/119593609</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/119593609</guid><author>binggui2</author><pubDate>Wed, 11 Aug 2021 09:01:51 +0800</pubDate><description><![CDATA[dfs树1是想到了，也想到了dfs过程中需用记录每一个历史节点的图，感觉空间复杂度太高了就没细想。
dfs树1，假设该节点为u。维护树2以u为根的子树中 为u树1的祖先的节点 中深度最深的，记为h[u]
该节点为树1中链底部的答案是dep[u] - h[u]。
主席树按照树2的dfs序维护每个节点的h。
dfs回退节点的时候直接用主席树中的历史节点即可。
主席树上使用懒标记，能不下放时就不下放。
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#includ]]></description><category></category></item><item><title><![CDATA[2021牛客多校第八场 F 离线求值+bitset存图+滚动数组]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/119593585</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/119593585</guid><author>binggui2</author><pubDate>Wed, 11 Aug 2021 09:00:28 +0800</pubDate><description><![CDATA[F
在线复杂度高就离线
每个点都是由下或右去转移的，只用记录两层节点即可，相当于是一个滚动数组。
对于每个节点来说，用一个bitset存图，用来记录当前点是否可以到达地图上的某个点。
更新完该点的bitset后更新从该点出发的答案。
#include &lt;bits/stdc++.h&gt;
using namespace std;

const int N = 510, M = 500050;

#define node(x, y) x * m + y

int n, m, k;
char z[N][N]]></description><category></category></item><item><title><![CDATA[2021牛客多校第八场 D]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/119593556</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/119593556</guid><author>binggui2</author><pubDate>Wed, 11 Aug 2021 08:59:17 +0800</pubDate><description><![CDATA[赛场上有一个公式没推出来。
a + b = (a | b) + (a &amp; b)
有了这个公式后直接对于每一个数字来说按位枚举情况，然后找方案数即可。过程中会有回溯去修改历史情况的值。
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;
using namespace std;

const int N = 100010;
#define ll long long

int n;
int b[N], c[]]></description><category></category></item><item><title><![CDATA[Research Productivity Index]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/115061839</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/115061839</guid><author>binggui2</author><pubDate>Mon, 22 Mar 2021 08:50:55 +0800</pubDate><description><![CDATA[一道dp，比赛场上看出来是一个dp，可是只会暴力，
后来发现转移方程很简单，还是太菜了
#include &lt;cmath&gt;
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;
const int N = 200;

int n;
double d[N];
double dp[N][N];

double c]]></description><category></category></item><item><title><![CDATA[2015沈阳网络赛 C]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114314965</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114314965</guid><author>binggui2</author><pubDate>Wed, 03 Mar 2021 14:55:46 +0800</pubDate><description><![CDATA[树上差分 用到了树链剖分的方法求 lca。
这题数据有点弱呀，
#include &lt;cstdio&gt;
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;algorithm&gt;
using namespace std;

const int N = 20020, M = 2 * 200020;

int n, m;
int h[N], e[M], ne[M], idx;
int dfs[N], cha[N], d[N]]]></description><category></category></item><item><title><![CDATA[CF Global Round 13 D]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114265753</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114265753</guid><author>binggui2</author><pubDate>Mon, 01 Mar 2021 16:33:37 +0800</pubDate><description><![CDATA[二进制永远的神
题干
题解：
如果 u 到 u + v 中有一条边，那么 u &amp; v = v,
那么证明二进制 v 为 1 的位 u 也为 1。
u + v 的时候， 如果两位全为 1 的话，高位进位，该位变0。
不全为1的时候，该位为1。
总结一下： u中1的位置 一定比 u+v中1的位置 低或相等，照着这个规律去判断两个数字之间有没有边即可。
还有就是别忘了 只能向比自己大的值连边。
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#includ]]></description><category></category></item><item><title><![CDATA[CF Global Round 13 C]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114262259</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114262259</guid><author>binggui2</author><pubDate>Mon, 01 Mar 2021 14:32:32 +0800</pubDate><description><![CDATA[题干
模拟这个过程，对于每个点来说记录他的入度。
入度数组为 in
高度为 d
如果 in[i] &gt;= (d - 1) 该点能由之前点来转化，而且多的可以更新下一个值 in[i + 1] += in[i] - (d - 1)
如果 in[i] &lt; (d - 1) 那么他无法完全有之前的转换，得从该点开始， ans += (d - 1) - in[i]
然后对于该点来说更新他后面的点 j = (i + 2 ~ min(n, i + d[i])) 这个区间内的 in[j] ++
#include &]]></description><category></category></item><item><title><![CDATA[2020南京站 F-Fireworks]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114241595</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114241595</guid><author>binggui2</author><pubDate>Sun, 28 Feb 2021 22:38:15 +0800</pubDate><description><![CDATA[还是得学率论 T_T sad.jpg
题解：
这个题用到了概率论的知识，伯努利实验的期望公式
期望为 E(x)=(n∗x+m)(1−(1−p)x)E(x)=\frac{(n*x +m)}{(1-(1−p)^x)}E(x)=(1−(1−p)x)(n∗x+m)​
求导后发现有零点，三分即可
#include &lt;cmath&gt;
#include &lt;cstdio&gt;
#include &lt;iostream&gt;
using namespace std;

double p, q, n, m]]></description><category></category></item><item><title><![CDATA[CF 704 (Div. 2) D]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114235743</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114235743</guid><author>binggui2</author><pubDate>Sun, 28 Feb 2021 18:40:46 +0800</pubDate><description><![CDATA[Codeforces Round #704 (Div. 2) D
题意：
a个0，b个1，组成两个数字。
两个数进行相减后二进制1的个数为k。
题解：
二进制加法，细节还是得多想。
k!=0k!=0k!=0时，如果 k≤(a+b−2)，2≤b，1≤ak≤(a+b-2)，2≤b，1≤ak≤(a+b−2)，2≤b，1≤a 即有答案，
#include &lt;bits/stdc++.h&gt;
using namespace std;
#define ll long long
 
const int N = 2]]></description><category></category></item><item><title><![CDATA[CF 704 (Div. 2) E]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114235709</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114235709</guid><author>binggui2</author><pubDate>Sun, 28 Feb 2021 18:40:16 +0800</pubDate><description><![CDATA[Codeforces Round #704 (Div. 2) E
题解：
把第一个数组当成初始序列，查看其它序列，进行修改，最终求出答案
先分析直接有答案的：
如果初始序列和其他序列进行对比不同项 不超过2个，初始序列即为答案。

如果初始序列和其他序列进行对比不同项 超过4个，不可能有答案。

然后分析如何进行修改，对于 除了初始序列剩下的序列 与 初始序列进行对比：
不同项有四个，那么必然得修改其中的任意两个，共6中情况，修改后查看其他序列是否符合要求。

不同项最大为三个，任意选出不同项为三个的序列进]]></description><category></category></item><item><title><![CDATA[刷题记录]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/114235589</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/114235589</guid><author>binggui2</author><pubDate>Sun, 28 Feb 2021 18:39:50 +0800</pubDate><description><![CDATA[标 * 的为有价值的题，
标 ^ 的为欺诈题，
标 - 的为知识点待填坑，
标 ? 的表示看别人是这样做的但是没懂为什么
标 $ 的表示现在还不会的，或者没学过，但很有用的题
组队训练的题，如果是队友过的板刷题，题面又很长，就会标个“队友说是沙雕题”
21.2.28
Codeforces Round #704 (Div. 2)
A 取余
B 规律
C 双指针双向贪心
D 二进制加法
E 构造，暴力情况讨论

...]]></description><category></category></item><item><title><![CDATA[2019 ICPC 南昌站 And and Pair]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/112647305</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/112647305</guid><author>binggui2</author><pubDate>Fri, 15 Jan 2021 09:19:43 +0800</pubDate><description><![CDATA[2019 ICPC 南昌站 And and Pair
个人感觉是一个分类讨论的题目
首先题目要求 :
给出一个n，求（i， j）的个数
0 &lt;= j &lt;= i &lt;= n

i &amp; n = i

i &amp; j = 0

从低位向高位访问，如果出现1的话，并有x个1，y个0。
那么进行分类讨论，除最高位的1之外所有位来说
如果 i = 1，j 可以为 0（对于i和j的同一位来说）
如果 i = 0，j 可以为 0 。
如果 i = 0，j 可以为 1 的前提为 i 的最高位为 1]]></description><category></category></item><item><title><![CDATA[CF代码出错点]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/112070505</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/112070505</guid><author>binggui2</author><pubDate>Fri, 01 Jan 2021 21:29:18 +0800</pubDate><description><![CDATA[600 div2A
    for(int i = 0;i &lt; n;i ++){
      if(b[i] &lt; 0) ans = 1;
      else if(b[i] &gt; 0 &amp;&amp; t == 0){
        t = b[i];
        while(b[i] == t &amp;&amp; i &lt; n) i ++;
        i --;//外层每次就++,这里得减一次
      }
      else if(b[i] &gt; 0) a]]></description><category></category></item><item><title><![CDATA[单调栈与单调队列]]></title><link>https://blog.youkuaiyun.com/binggui2/article/details/112070351</link><guid>https://blog.youkuaiyun.com/binggui2/article/details/112070351</guid><author>binggui2</author><pubDate>Fri, 01 Jan 2021 21:27:26 +0800</pubDate><description><![CDATA[单调栈
题意：
对于一个数组中每一个数来说，找到其左面第一个小于该点的值。
很容易想到是单调栈，可是为什么用单调栈呢？
证明：
我们对[a b] c {d0, d1, d2 ...}来说，已知a &lt; b &amp; b &gt; c，对于c后面数字进行分析。
c后数字如果大于c，有可能答案是c，但答案不可能是b。
那么对于c后的数字来说b是没必要存在的，可以由c来代替。
对于{}也就是待分析数字前，应该是单调递增的, 且可支持单侧（挨着{}的方向）动态更新递增数组，即把b用c代替。
抽象完模型后为单调]]></description><category></category></item></channel></rss>