在线和离线算法

在OI/ACM中,我们常常会听到对于区间修改、区间查询等问题的处理时,大佬们口中说的“离线”,“在线”等名词,一开始自然是一脸蒙逼。

在线离线可以简单的理解为对于所有的操作是否需要读入完毕

在线的要求是可以不用先知道所有的操作(类似询问、修改),边读入边执行,类似“走一步,做一步”的思想。

离线则与在线相反,要求必须知道所有的操作,类似"记录所有步,回头再做”的思想,一般用Query[]记录所有操作。

常见的在线算法:带有“可持久化”字样的(主席树(可持久化线段树)、可持久化字典树、etc), 其实正常写题时基本上都是在线的思路……

常见的离线算法:整体二分、陈丹琦(CDQ)分治、莫队算法

对于正常的题目来讲,两种算法其实都可以使用,经典的题目如:动态第K大问题(zoj 2112),解法有树套树(在线)和整体二分/CDQ分治(离线),但是区别在于:

在线算法的思路相对简单,而代码量大(如某些毒瘤题),容易爆栈,赛场上及其考验心态( 菜逼表示早就炸了

离线算法的思路相对复杂,而代码量小,建议选手多采用(毕竟代码越多,debug越困难)

当然对于一些不正常的题目(强制在线),只能老老实实码数据结构了,嗯。

强制在线的例子如:当前读入的数据需要xor上一次的结果、交互式等。

你可能感兴趣的:(在线和离线算法)