总结
一定程度上被出题组误导了。既然说是要报复社会,题目肯定难得变态。
第二题浪费了大量时间,看了第三题没怎么想认为比第二题更难,so…
时间还是要有固定的分配啊,就目前而看反正联赛应该没这么难。
第一题$30-60min$
第二题$60-90min$
第三题$60-90min$
具体自己调整,第二题和第三题已经不一定谁更难了,但最小时间肯定要达到,这几次爆$0$基本都是第三题基本在$30min$以下(上上场前两题很顺,留了时间还对拍了,所以没爆$0$)。
务农政策
显然就是求$min(sum(i,k,i-a+1,k-b+1)$ $-$ $tallest(i,k,i-a+1,k-b+1) times a times b)$。维护的重点也就是二维的区间最大值。
如果直接枚举,可以发现对于枚举的$k$,每次扫描的二维区间是从上向下滑动的。可以用双端队列维护。
70分 用上述思路,然后每次查询区间$[k,k-b+1]$用线段树,复杂度是$nmlog(n)T$,常数太大,直接爆炸。
|
|
又发现$k$从b到n枚举,每次查询的$[k,k-b+1]$是从左向右滑动的,也可以用双端队列维护。
|
|
后来跟yahong再讨论时,突然发现$st表$也可以,而且速度比大多数单调队列要快。实现方法跟线段树基本一样,只是询问复杂度变成$O(1)$。
|
|
刷副本
求累乘就不用说了,主要是求首位数字。
对于最终数字$w$,可以表示为$w=a*10^b$,其中$ain[0,10)$。$pp=log_{10}w$,$a=10^{{pp}}$,$a$就是最终答案。用对数公式$log_{x}{ab}=log_xa+log_xb$将求法转为$log_{10}a$的累加。说起来思路比较简单,但是谁能想到用这种数学公式化简?询问时$O(1)$,更新时更新所有是$x-1$因子的$R$,对于$x=1$要更新所有,所以可以在查询时加入。
值得一提,正解其实可能被卡掉,仔细观察的话,发现用高精是从后往前求首位,正解则从前往后,是不能省略数字的,我是说正解的double保存位数有限,所以经多次加法,可能使得被省去的位数也对答案造成影响,理论上存在问题,但是double的精度还是很高,所以在实际中精度误差几乎被忽略
所以正解可以理解为从前往后,忽略低位对于答案的影响。
分块决策会更快。当R大于$sqrt n$时直接爆力,小于时在更新是维护。
|
|
圣杯战争
答案是一条边应该是比较显然的。
所以可以把图改成生成树,并以$1$为根。为了方便维护,把一条边对答案的贡献放到边上深度小的点上。然后对于每一个节点,建一棵关于儿子颜色的线段树。每次询问$max(query(1,c[i]-1),query(c[i]+1,K))$,并且由于颜色会改变,所以同一颜色的点都要被记录,每次弹出最小的,可以用multiset维护。直接开线段树是开不下的,所以是动态线段树。
|
|