【DS】P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I

我们已经有了高于 n1.5 的在线做法。

这东西就是套路,但按 CF765F Souvenirs 的方式维护点到块太难搞了。。。

因为前者算重没事。。。

所以等我明早起来再重构。。

f[i][j]:blockiblockj

g[i][j]:iR[blockj]

h[i][j]:L[blocki]j

f2[i][j]:blocki[posj,R[i]]<aj

f3[i][j]:blocki[1,posj]>aj

g[i][j]=g[i+1][j]+f2[id[i]][posi]+cal(ai,[L[id[i]+1],R[j]])

h[i][j]=h[i][j1]+f3[id[j]][posj]+cal(aj,[L[i],R[id[j]1]])

大致就是维护块与块,点到块右端点,块左端点到点,块内某个数与块内前后缀所产生的逆序对数量,将一个点到一个区间的贡献拆成一个点到一些整块的逆序对加上一个点到块内前后缀的贡献,前者需要将二元组 (i,j) 表示为第 i 个块权值为 j 的点放到坐标系中。那么对于块区间 [l,r] 值域在 [L,R] 的就可以转化成矩阵求和,便可通过二位前缀和解决。查询的时候,可以通过容斥再加上散块相互间的贡献,后者可以通过类归并的 O(n+m) 实现,只要初始化的时候对于每个块内部排序即可。这样可以不带 log,但感觉跟暴力提取出来再跑排序可能没啥区别吧。

NMD,卡常太离谱了。不卡了。


__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/15872298.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示