【笔记】常数研究
参考:
题解 CF708E 【Student's Camp】 - 热言热语 的博客 - 洛谷博客 (luogu.com.cn)
取模
inline int _(int a) { return a + (a >> 31 & D); }
inline void Add(int &a, ll b) { a = (a + b) % D; }
inline void Sub(int &a, ll b) { a = _((a - b) % D); }
inline void Mul(int &a, int b) { a = (ll)a * b % D; }
_
这个函数用于把负数调正。小技巧是在程序中间有些可以将就负数运算的地方不用调正,但是像快速幂的参数就必须调正。
Add
和 Sub
的第二个参数是 long long
型,这样就可以在进行 Add(a, (ll)b * c)
这种操作的时候少一次取模。
要把 int
转 long long
运算的时候不要用 1ll *
,直接用 (long long)
强转,会快一些。
long long
取模并没有很多人想象的那么慢,实测 次取模仅比 int
取模慢了 0.05s
一份不错的实践:CF708E Student's Camp
线段树
数组存信息和结构体存信息的差距(主席树区间修改,共 4 个数组,每个数组大小 2e7):
结构体更快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】