Loading

AtCoder Other Contest 做题记录

AtCoder Other Contest

ACL

ACL1C - Moving Pieces

才发现自己很久没有碰过网络流了。

题意:给定一个棋盘,上面有障碍和棋子,要求不经过任何障碍,不出界,同一个格子同时只能有一个棋子,每次可以将棋子向右或是向下移动一步。要求最大移动次数。

\(1\le N,M\le 50\)

解法:

完全没想到可以网络流,注意到这是费用流之后题目变得很简单了。每一个点向其能走到的点连一条费用为 \(-1\),流量无限的边,跑费用流即可。

https://atcoder.jp/contests/acl1/submissions/59252262

JSC

JSC2021F

WATER

题意:给定长度为 \(N\) 的数组 \(a\),长度为 \(M\) 的数组 \(b\),初始所有元素的值为 \(0\),有 \(Q\) 次单点修改,要求每一次修改后回答 \(\sum_{i}\sum_{j}\max(a_i,b_j)\)

\(1\le N,M,Q\le 2\times 10^{5}\)

解法:

解法:考虑每一次修改一个值的影响。先减去原来对答案的贡献,再加入新的贡献。一个值,例如 \(a_i\) 对答案的贡献是 \(b\) 中小于 \(a_i\) 的数量乘 \(a_i\),加上大于 \(a_i\)\(b\) 之和。线段树维护一下即可。

Submissions

Code Formula

Code Formula 2014 本選H - 平和協定

fydj 推荐的题目。

题意:\(n\) 个点,每一个点有两种属性 \(a_i\)\(b_i\),如果 \(s_1\le (a_i-a_j)(b_i-b_j)\le s_2\),那么在点 \(i\) 和点 \(j\) 之间连一条边,问能连多少条边?

\(1\le a_i,b_i,s_1,s_2,n\le 5\times 10^{4}\),4s

解法:

根据 fydj 所说,5e4 还开 4 s,让人想到分块,更具体地说是整除分块。

先将 \([s_1,s_2]\) 容斥为 \([1,r]\),对于 \(a\) 之差为 \(x\) 的,限制 \(b\) 之差必然是一段区间 \([1,\lfloor \frac{r}{x}\rfloor]\),可以整除分块,然后二维数点。

实现上,这题空间是 64MB,不能将 n 根 n 个询问全部存下来,可以先整除分块枚举 \(a\) 之差的范围,再枚举每一个点。然后有点卡常。最后发现排序很慢,发现二维数点拆出来的两个前缀是分别有序的,改成线性的归并就过了。

posted @ 2025-02-07 17:08  Terminator-Line  阅读(30)  评论(0)    收藏  举报