zoukankan      html  css  js  c++  java
  • CF1458C

    这是昨天字节跳动 div. 1 的 C。当时打完比赛我还在骂,这场比赛 BC difficulty gap 怎么这么大,亏了我先看 C 再看 B。但是最后发现这其实并不涉及到没学过的东西,而且很多人都做出来了,所以菜是原罪……


    注意到 RLDU 和 IC 根本就不是一个性质的,很难一起在矩阵上面搞。我们考虑,初始的每个格子显然都对答案矩阵的恰好一个格子做出贡献,那么我们考虑拆开它们,考虑每个单个格子对答案矩阵的贡献。

    我们考虑把一个格子看成三元组 ((i,j,a_{i,j}))。那么 RL 是在 (j) 上面增减,DU 是在 (i) 上面增减,IC 则是交换第一三或二三维。我们考虑对一开始的 (n^2) 个三元组每个分别维护这 (m) 次操作。优化点在于,将操作转化为这种抽象的事情之后,变得可合并了,即先后若干个操作可以压缩到一个新的 (mathrm O(1)) 的操作(这个套路类似于矩乘,还有之前某次洛谷月赛的 D2D),来用压缩操作的时间换取对所有元素做这么多次操作的时间。

    那么我们维护这些操作合并起来是什么样子。每个三元组可能某一维会被增加,可能某两维会被交换。那么我们维护原先的每一维被加了多少,然后现在跑到了哪个位置上了即可。什么都是 (mathrm O(1)) 的。

    code

    珍爱生命,远离抄袭!
  • 相关阅读:
    倒计时显示
    Global.asax实现屏蔽ip和图片防盗链
    同一账号不能同时登陆
    javascript中defer的作用
    javascript焦点图
    asp.net自定义分页
    GridVew linkbutton点击时获取点击行label的绑定值
    内存对齐
    深入.NET托管堆(Managed Heap)
    内存对齐1
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cf1458c.html
Copyright © 2011-2022 走看看