zoukankan      html  css  js  c++  java
  • 省选模拟38

    A. Inverse

      这个题考场上打的有点恶心,导致调的时间有点长最后没优化出来,常数还挂了,被卡成暴力分。。。

      考虑dp,令$f[i][j][k]$表示第$i$次操作小的点在j大的点在k,最终形成逆序对的方案数。

      暴力枚举当前选择的区间的话复杂度是$n^4k$的,仔细看可以发现转移到的状态是$O(n)$的,所以对于每种状态转移就是$n^3k$的,考场上打了这个然而被卡成$n^4k$的分,之后卡了卡常就66分了。

      实际上可以发现这个东西可以继续优化,预处理出来前缀和的前缀和就可以做到$O(1)$转移了,总复杂度$O(n^2k)$

      吐槽一句,这个noi跑的是真的慢。。。

    B. Subsequence

      这个题很像之前考过的某道题,那道题的做法就是用平衡树维护差分数组,这道题好像几乎一样。。。考场上给的时间太少了。

      考虑一个暴力的dp,打个表或者大力猜结论,可以发现存在一个状态转移的分界点。

      这个分界点可以通过差分数组在平衡树上二分得到,然后就变成了简单的单点插入,后缀加,直接操作就行了。

    C. Convex

      考场上感觉不太可做,打了40暴力就跑了,然后取模写挂成5分。

      考虑维护分界点,被当前枚举的点和分界点分开的两块中的一块保证始终不大于另一块,这个用简单的单调指针就可以实现。

      然后考虑如何快速算出来当前点到分界点之间的贡献,发现选择一个固定的点当成基准点的话,那么每个块的面积都可以简单用前缀和计算。

      为了方便,选取原点当做基准点,于是就需要叉积的前缀和和前缀和的前缀和,和横纵坐标的前缀和,直接维护即可。

  • 相关阅读:
    vi/vim 如何添加和删除多行注释
    linux报错:命令未找到
    删除远程分支的方法
    k-vim常见快捷键
    [转]常见linux命令用法介绍
    python库termcolor用法
    gitignore样例解析
    [转]"git rm" 和 "rm" 的区别
    python中的slice用法
    牛客网linux试题-错误整理-20170914
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12423106.html
Copyright © 2011-2022 走看看