Atcoder abc287
https://atcoder.jp/contests/abc287/tasks
G - Balance Update Query
n种卡,每种无限多,初始每种 单价ai,最多取bi张
q个询问,每次三种可能操作
修改一个的上限bi
修改一个的单价ai
问 恰好取x张的最大价值
范围
n,q 2e5
ai [0,1e9]
bi [0,1e4]
2s
1024mb
我的想法
如果固定,贪心从单价大到小的去取
对单价排序 做根号分治
让每个块的个数 保持在sqrt(n)个
这样每次修改操作就是 最多改变 sqrt(n)个块, 每个块内部就是 log(sqrt(n)) 的操作次数 时间复杂度 O(q sqrt(n) log(sqrt(n)))
而查询, 因为可以做块的个数和与代价和记录, 所以 暴力找在哪个块,再在块里暴力搜,O(q (sqrt(n)+log(sqrt(n))))
2s 还是会tle的
200000*math.sqrt(200000)*math.log(math.sqrt(200000))/math.log(2) = 91203683.14743526
它的确也tle了
https://atcoder.jp/contests/abc287/submissions/38429726
21AC + 19TLE