题意:
n个村庄分配粮食,m次分配,每一次分配树上的l~r区间村庄内某种粮食*1,询问每个村庄最多粮食数量的种类是什么
分析:
首先注意到题目要求在树上的路径分配粮食,很容易想到用树链剖分和线段树去处理区间查找过程
如果此时强行将每个区间内的粮食数量及种类全部存下来,很明显内存会爆掉,试过了。。。
此处则行不通,也是关键要解决的问题
稍微观察一下,注意到没有更新操作,完全可以离线,很快发现其实对于粮食的分配可以根据种类排序
由于每个村庄的答案唯一,并且在后一种类来之前,前一种类的粮食一定是分配完成的,那么此时在线段树上递归pushdown就能不断更新最大种类的粮食
C++ 提交 4992ms 强行卡过 排名最后。。。(谁让我懒,用vector呢。。。)
#include
#include
#include
#include
#include
#include
#include