题解 洛谷 P5324 【[BJOI2019]删数】】的更多相关文章

原题传送门 易知这个数列的顺序是不用考虑的 我们看两个数列 \(1,2,3\)和\(3,3,3\)都能删完,再看两个数列\(1,2,3,4\)和\(2,2,4,4\),也都能删完 不难发现,我们珂以把这些数字塞进桶中,记\(cnt_i\)表示数字\(i\)出现的次数,对于每个\(i\),在一颗线段树上把区间\([i-cnt_i+1,i]\)赋值成1(因为一次删\(cnt_i\)个珂以转化成每次删\(1\)个,值从大向小递减),最后看[1,n]上有几个点不是1,这就是题目所求的答案 单点修改就直接…
先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\),然后序列长度变为\(x_1\),删去所有的\(x_1\),然后序列长度变为\(x_2\),删去所有的\(x_2\)--直到对于一个长度为\(x_i\)的序列,其中没有\(x_i\)这个数,那么此时就要对序列执行修改操作了. 考虑过程,当不能连续的删数时,就需要通过修改来填补空缺.实际上,对\([…
(洛谷t2755暂时过不去了) 删数问题[传送门] 洛谷算法标签: emmmm……删数问题又牵扯到了字符串.因为毕竟高精度的数240位呢!要是输入一个整型,要码240行来求出每一位……怕是还没求出来就tel了.所以我们又用到了字符串(真的很常用哎).这个题ac起来还是比较easy的,毕竟一本通上有题.BUT——一本通上本没有考虑删后的数是零的情况啊!我也没考虑,所以没有一遍a[桑心](下课辽要,直接附ac代码吧) #include<iostream> #include<cstdio>…
删数 题目链接 一道裸的区间DP,f[l][r]表示剩下区间[l,r]时的最大价值 可以由f[1~l-1][r]和f[l][r+1~n]转移过来 详见代码: #include<algorithm> #include<iostream> #include<cstdio> #include<cmath> using namespace std; #define N 105 int n,x[N],f[N][N],ans; int main() { scanf(&q…
删数问题 题目链接 首先找出最小的k个数:用堆每次取出最小的元素p,将p*2+1和p*4+5压入堆. 贪心求最大数:从前往后找第一个data[j+1]>data[j],删除data[j].(链表应该是比较快的,然而蒟蒻懒得写链表,用了一个数组瞎搞..不开氧气优化会T一个点) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmat…
传送门 不如先考虑暴力,能删的序列首先有\(1,2,3...n\),还有就是升序排序后从后往前放数,第\(i\)位要么放\(i\),要么放\(i+1\)位置的数,例如\(1,2,4,4,5,6,9,9,9\) 如果一个数\(i\)出现了若干次,假如是\(num_i\)次,我们发现是可以在\(i,i-1,i-2...i-num_i+1\)上放\(i\)的,这样放完之后,如果有的位置没有用到现有的数放上去,那么就要从没用的数里改一个放过来,问题也就是用一堆数,最多能放多少个位置.考虑从后往前放,然后…
[BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即修改两根柱子的长度.全体修改就可以理解为询问区间的平移. 那么只需要拿线段树维护这个东西就行了. #include<iostream> #include<cstdio> using namespace std; #define MAX 150150 #define lson (now&…
题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\(k+1\),否则,调整右界到\(k+a_i\). 考虑如何优化,还是扫到了\([1,k]\),假设\(ans=k+1\),如果所有小于等于\(ans\)的数的和\(sum\)起来大于等于\(ans\),则一定可以将\(k\)更新成\(sum\).否则直接输出就好了. 以上这个过程很明显可以用主席树维护,…
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师)的掌握程度 考完试有人说这题是马拉车,吓死我了 首先,你把数据读入之后,先用一个大法师把以每个节点为根的子树的大小和权值都预处理出来,方便待会剪枝 然后,你对以每个节点为根的子树,都判断一下以下条件(这时刚才处理的东西就有用了) ① 左子树和右子树的节点数是否相等 ② 左子树和右子树的权值是否相等…
玄学代码(是洛谷题解里的一位dalao小粉兔写的) //数位DP(二进制)计算出f[i]为恰好有i个的方案数. //答案为∏(i^f[i]),快速幂解决. #include<bits/stdc++.h> using namespace std; #define ll long long ; ll n,ans=; ll c,f[]; ll qpow(ll b,ll e){ ll a=; ) e&?a=a*b%mod:; return a; } int main(){ scanf(&quo…