hdu5869——Different GCD Subarray Query(思考+树状数组)
2016-09-10 20:08
302 查看
这是我第二次做这道题了,还是没做出来,真是惭愧。。
题意:长度n的序列, m个询问区间[L, R], 问区间内的所有子段的不同GCD值有多少种.
题解:考虑固定左端点的不同GCD值,只有不超过logA种, 所以事件点只有nlogA个. 那么离线处理, 按照区间右端点排序从小到大处理询问, 用一个树状数组维护每个GCD值的最大左端点位置即可. 复杂度是O(nlogAlogn).
题意:长度n的序列, m个询问区间[L, R], 问区间内的所有子段的不同GCD值有多少种.
题解:考虑固定左端点的不同GCD值,只有不超过logA种, 所以事件点只有nlogA个. 那么离线处理, 按照区间右端点排序从小到大处理询问, 用一个树状数组维护每个GCD值的最大左端点位置即可. 复杂度是O(nlogAlogn).