摘要:
嘟嘟嘟 这道题我觉得跟最大子矩阵那道题非常像,都是O(n4)二维前缀和暴力很好想,O(n3)正解需要点转化。 O(n4)暴力就不说啦,二维前缀和,枚举所有矩形,应该能得55分。 O(n3)需要用到降维的思想。先考虑这么个问题:对于一个序列,求区间和是k的倍数的区间个数。有点想法的暴力就是前缀和预处理 阅读全文
摘要:
嘟嘟嘟 一道很水的爆搜题,然后我调了近40分钟…… 错误:输入数据最好用cin,因为数字可能不止一位,所以用scanf后,单纯的c[0]为字母,c[1]数字………………………… 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 # 阅读全文
摘要:
嘟嘟嘟 带修改区间第k大。 然而某谷把数据扩大到了1e5,所以用分块现在只能得50分。 分块怎么做呢?很暴力的。 基本思想还是块内有序,块外暴力统计。 对于修改,直接重排修改的数所在块,时间复杂度O(√nlogn√n)。 对于询问,二分答案,然后在每个块内再二分统计小于mid的数有几个,块外暴力统计 阅读全文
摘要:
嘟嘟嘟 郑重声明:我的前几到分块题写法上都有点小毛病,以这篇为主! 这道题感觉也是分块的基本套路,只不过卡常,得开氧气。 维护俩:sum[i][j]表示前 i 块中,数字 j 出现了多少次,ans[i][j]表示块 i 到块 j 的答案。这两者都可以在O(n√n)内预处理。方法也比较套路,具体看代码 阅读全文
摘要:
嘟嘟嘟 分块好题。 想法其实特别暴力,对于每一个块,都在块内排一个序,这样查询整块的时候二分找大于等于k - add[i]的数有多少。然后块外零散的数就暴力判断好啦。 所以有两个数组b[i][……]:代表第 i 块有哪些数;add[i]是整块加标记。 然后修改的时候,对于零散的数所在块,暴力重构b数 阅读全文
摘要:
嘟嘟嘟 分块经典题竟然是一道黑题…… 分块求区间众数的大体思想是对于询问区间[L, R],预处理出这中间的整块的众数,然后统计两边零散的数在[L, R]中出现的次数,最后取出现次数最多且最小的数。 因此需要一个sum[i][j]表示前 i 块中数字 j 出现的次数,ans[i][j]表示块 i 到 阅读全文