• csps51(a)


    T1的暴力死掉了。。。。。。

    T3大众分。。。。。。

    T2打了几个小表,发现了一些规律,成功yy出了$O(nlogalogn)$的暴力,拿到了73pts,弥补了爆炸的T1。

    T1.

      考场上看了看,遥远的国度。由于我没做过,感觉硬刚可能GG,于是先放了。

      然而最后打了40pts暴力爆零了。。。。

      正解其实很简单,考虑当前根与原根的关系,讨论一下就好了。

    T2.

      由于两个log,50w的数据范围,很大的优化空间,我果断地走向了暴力的道路。

      这题如果强制在线,我的方法应该就是正解了。

      思想很简单,我并没有转化题意,所以从一个完全不同的角度去考虑:

      某一个数,除非它是目前最小的,那么它必然在某一时刻会被$f[x-1][y-1]$更新,并且从此之后一直被它更新。

      那么,我们可以发现,这两项的差成为了定值,为$a[y]$。

      而在它被上一列更新之前,就会一直被自己的前一项更新,以等差数列的形式增长。

      那么我们要求某一项$f[x][y]$值的时候,就可以一直去找它的$f[x-1][y-1]$项,直到这一项已经是等差数列的形式,然后求出当前项,递推回去即可。

      我们考虑如何确定当前项已经是等差数列。显然我们可以预处理出来,对于每个$a[y]$,它到第几项不再是等差数列。(l[x])

      我们考虑怎么预处理。二分答案,对于每一个二分的值,我们假设当前仍然是等差数列,比较它与$f[x-1][y-1]+a[y]$的大小,若小于,说明当前项由上一列更新更优,不再是等差数列。

      下一个问题是,如何求出$f[x-1][y-1]$的值。由于之前的数我们已经将它何时不再成为等差数列处理了出来,所以我们需要找到第一个成为等差数列的位置。

      继续二分答案,查询区间中最大的$l[x]$是否能被这个数利用。

      我们可以用ST表来实现$O(1)$查询,每次求出一个$l[x]$,在ST表末尾加入它即可。

      询问直接调用之前的求值函数即可。

      代码实现很简单,而且这大概是在线的唯一做法了。

      理论复杂度爆了,所以加了一些减枝,卡了卡常,A掉了。

      正解是将所有操作离线,维护一个下凸包,在凸包上三分。

      也许可以算自己A掉的A组题?

    T3.

      母函数,NTT。

  • 相关阅读:
    js的同步和异步
    事件三
    事件2
    JS作用域题
    游戏之乐
    NSTimer(2)
    NSTimer
    理解 Objective-C Runtime
    iOS系统安全机制概览
    Which is the best of GCD, NSThread or NSOperationQueue?
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/11587560.html
Copyright © 2020-2023  润新知