第一题 删数字
题目大意:给你一个n个数组成的序列
我的思路:我先从小到大排序,我们要使得任意两数差值的最大值与任意两数差值的最小值的和最小,可得最后剩下的数一定是一个连续串。我用单调队列来维护差的最小值,而差的最大值可以
第二题 最短路
题目大意:给出N个节点,
其实这道题,宽搜就行了。
第三题 病毒传播
题目大意:村庄中共有
k最大
时限是两秒
我的做法:其实我在比赛的时候并没有想到正解,但是水了100分。我们可以发现我们设a[i]表示第i天感染病毒的人的集合,那么易得
标准做法:我要求a[k],我可以先求a[k/2],然后把a[k/2]相乘,同理,我要求a[k/2],我可以先求a[k/4],然后把a[k/4]相乘,直到要求的为a[1],乘回去就行了。
第四题 屏保
题目大意:要求维护由n个点
n,
对于一对h[i],h[i+1],围成的区域,可得,[0,min(h[i],h[i+1))对答案的贡献是一个常数,[min(h[i],h[i+1),max(h[i],h[i+1])]对答案的贡献是一个二次函数,(max(h[i],h[i+1]),hmax]对答案的贡献是一个一次函数。我可以用线段树来维护二次项,一次项,常数项系数,更改时,直接简单在树上加减系数,求答案是,用线段树求系数,再把x带入二次函数的解。