2012年8月28日
摘要:
题意:n幢摩天大楼,第i幢初始高度为a[i],每个单位时间增长b[i]。询问区间[x,y]的大楼在t时刻的最大高度。虽然是区间查询,线段树不会搞。先读入询问,对时间非降排序,离线搞是很显然的。分成sqrt(n)块,在区间内的每块在常数时间内得到答案,两端暴力答案。高度y[i]=a[i]+b[i]*t,是直线方程。所以每块在常数时间得到答案,就要维护每块直线的单调性,剔除不影响答案的直线。由于块内答案是递增的,所以直线的斜率也是递增的。所以对每块的直线斜率非降排序。设有k1,k2,k3三条直线,且斜率递增,若k1与k2的交点在k3的下方,那么k2显然是多余的。纸上yy一下,比较时把除法化为乘法, 阅读全文
摘要:
题意:有n个洞,编号1~n,每个洞有一个power,若有球掉入第i个洞,会被弹到第i+power[i]个洞。两种操作:1,球掉入第i个洞后,问弹出n个洞前最后掉入的洞的编号,以及弹的次数。2,修改第i个洞的power值。很裸的动态树。与这题本质上是相同的:【HYSBZ】1036 树的统计Count但是,通过分块暴力,可以做到O(n*sqrt(n))。很显然,将1~n分成sqrt(n)块。一个很直接的想法,把a块的最后一个直接指向b块的最后一个(a!=b),这样暴力非完整的块,其他块O(1)得到。但是,可以有更简单的写法,把相同块中每个洞都指向会到达的最后一个洞,并统计其中跳过多少个。查询就暴力 阅读全文