zoukankan      html  css  js  c++  java
  • loj6169 相似序列(可持久化线段树)

    题目:

    https://loj.ac/problem/6169

    分析:

    如果是要求两段序列全等的话,有一个套路:

    对于{a1,a2,a3} {a4,a5,a6}

    设一个素数p,那么如果p^a1+p^a2+p^a3==p^a4+p^a5+p^a6(模一个大质数意义下),那么这两个序列就是一模一样的

    那么可以事先求出前缀和,然后对于每个询问,直接前缀和相减比较值即可

    但是现在的问题是现在可以有一个位置不相同

    我们考虑构建一个询问区间的权值线段树,下标就是a[i],值就是Σp^a[i]

    那么很显然,如果对于询问的两个区间,它们的权值线段树的总和相同,那么就YES(是一模一样的)

    然后我们可以找到两棵权值线段树最小的下标qmin,满足qmin前的位置,和相同;再找最大的下标qmax,满足qmax后的位置,和相同

    然后我们发现,这个qmin和qmax在排序后的数组中的位置要“对齐”,也就是qmin在对应权值线段树中的排名要等于qmax在对应权值线段树中的排名

    当然对于每个询问不能都构建一次权值线段树,所以当然用可持久化线段树来维护

    O(nlogn+mlogn)

    细节:

    找到qmin和qmax后,不能确定qmin是属于[a,b]还是[c,d],所以要考虑两种情况,有一种成立就YES,略坑

  • 相关阅读:
    ThreadLocal
    spring概述
    排序
    内存的分配原则
    常用概念比较
    垃圾回收机制
    java的内存模型
    对象的内存布局
    adb connect 和 install 通讯流程
    Android硬件抽象层(HAL)深入剖析(三)
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7123838.html
Copyright © 2011-2022 走看看