摘要:
首先约束不成立情况,因为他是最大值减最小值,所以对于成立的h来说,h1等于0,h[n]=n-1,并且h[i]>=h[i-1]。 其次我们需要计算的是合法的排列。对于h[i]>h[i-1],显然a[i]是当前的最大值或者最小值,因此答案值*2,并且多出了h[i]-h[i-1]-1个空位,这个空位的意思 阅读全文
摘要:
这道题如果暴力的话是平方级别的,然后我们可以看出来,显然能够使用换根dp来做 只需要维护做两边dfs,分别维护向上向下的答案即可,不但要维护距离,也要维护点数。 维护的时候都是维护mod3状态下的答案 #include<bits/stdc++.h> using namespace std; type 阅读全文
摘要:
换根dp裸题,换根其实就是先做一遍dfs后,重新做一遍,第一次用下面的更新上面,第二次用上面的更新下面 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e5+10; const int i 阅读全文
摘要:
首先,如果k可以,那么2*k一定可以,因为这是两个k合并而来,因此如果存在答案,那么在n/2+1中一定存在答案 对于x分为两种,当x>=0,那么f[n]是最优的,只需要判断一下他即可 对于x<0我们可以尝试枚举k,首先从最大开始往下,因为k每减小一位,意味着出现了一段前缀和,以及之前的最小值减去x。 阅读全文