昨天的模拟赛考的不行啊。
和yy同学赶到考场,已经迟到了5分钟,看见zcr同学正在认真地敲着代码,心里就很慌。看见十分钟以后老卜才到,心里有了点安慰。
拿到题目,第一题。一开始看见题目十分激动,直接忽视了题目给的方程里面的绝对值。于是非常高兴地写了一个前缀最小值的处理,然后发现不对,仔细读题,看到绝对值,差点晕过去。加一个绝对值,那意味着我们的任务是在比该数大的数里面找最小值,比它小的数里找最大值。那么第一反应就想到了当年的推销员的堆,建一个小根堆维护比他大的数,建一个大根堆维护比它小的数,然后将每一个数在两个堆里面移来移去,但仔细思考发现根本不行,当年推销员的堆的分化标准是有单调性的,而这里不具有,不能保证每一个数只被动一遍,肯定会超时。然后想起最近都学了些什么——dp树剖平衡树,那么,dp?似乎不太行,因为具有绝对值,方程不好推。那么树剖?还是算了吧,树剖大多是树上操作,也不太好把一个好好的序列转成树。然后因为平衡树不太熟悉,直接不敢想,先跳过这一题吧。
好,看第二题,顿时高兴,这不是vjudge上作业的原题吗?典型的斜率优化,然后高高兴兴地开始写,期间写崩了很多次,最后样例终于过了。好,转战倒一。
仔细看倒一,第一反应树链剖分。当然我想到的树剖做法大概只能拿六七十分。然后,突然脑中对于T1灵光一现,打算用splay维护之前的比该数大的和比该数小的,然后通过splay的功能将需要动的那一段移到另一棵splay。很好,似乎可以了。然而最重要的问题是splay我不太熟,要写肯定漏洞百出,就像当年NOIP的跳房子一样在不会写单调队列的情况下写单调队列结果还没还没暴力的分高。于是我打算看看treap可不可以做呢,对目前已经扫过的序列,建treap,然后。。。惊喜地发现,用treap可以很轻松地搞到两个值!其实吧,偷点懒,用set也可以。那么,T1就可以很完美解决了开始写程序吧。
嗯然后,写完了T1,T2.然后,看了一下时间,发现只有一个小时了。我现在有两个选择,一是对拍,而是写T3。如果写T3的话,可能会得到六七十分,但是不对拍,T1,T2可能丢掉的不止60分,而且T3还有可能写不到六七十分。经过短暂的思考,我还是选择了对拍。于是先对拍T1,发现一直说我有错。于是,仔细地看了一下我的代码,怎么看也不问题。然后发现是暴力写错了...无语。好对拍第二题,嗯还是有问题。我经过仔细调试,发现了是初始化的条件控制不好。
最后发现还剩十几分钟,赶紧写T3,但是T3没有写完,就收卷了,所以只能把T1T2交上去了。所以最后我写出来的两题过了全点,但第三题直接没交。最后只拿了200分,十分伤心。有一个叫赵伯阳的学长差点ak,获得了第一名,再次对他表示无限的敬佩。
等期末考试以后一定要把T3做出来!
——发表于2018-01-22 20:19:06
原文地址:https://www.cnblogs.com/hankeke/p/9021859.html