zoukankan      html  css  js  c++  java
  • {POJ}{树状数组}

    总结一下树状数组的题目:

    {POJ}{3928}{Ping Pong}

    非常好的题目,要求寻找一个数组中满足A[i]<A[k]<A[j]的个数,其中i<k<j(或者相反)。很巧妙的将题目转化为树状数组的思想,从A[k]考虑,则只需要寻找左边比自己小和右边比自己大的可能性(或者相反),这样就可以用树状数组来维护。思想的转变很重要。

    {POJ}{1990}{MooFest}

    n头牛,不同的听力值v,当i,j想要通话时,需要max(v(i),v(j))*(dist[i]-dist[j])的volume,问这n*(n-1)/2对牛总共的volume时多少。非常好的一道树状数组, 自己想了很长时间没想起来,最后看了结题报告才恍然大悟,对n头牛按v进行排序,由小到大,tre_sumx[i.x]记录前i头牛于x的坐标的总 和,tre_cnt[i.x]记录前i头牛坐标低于x的牛的头数,total记录前i头牛的总x和,那么对于每个牛,依靠这三个量就可以计算出i牛和之前 的所有牛的volume和。

    {POJ}{1195}{Mobile phones}

    给定n*n矩阵,和几种在线操作,包括对某一点(x,y)值修改,查询一个矩形(x1,y1,x2,y2)的元素和。

    典型的在线查询,可用树状数组实现,查询矩形和时,稍微注意以下就可以了

      sum(x2,y2)+sum(x1-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1);

    还要注意树状数组的修改操作modify(index,delta)中的index要>0。

    {POJ}{3067}{Japan}

    顺序给两组平行的点依次编号1~N和1~M,给定K个线段在两组点之间,求相交(cross)的线段对有多少个,同一个起点或终点不算相交。

    由于题目涉及到统计和的问题,自然可以交给树状数组来做,方法和Cows差不多现对线段进行排序,按w由大到小,如果w相等,按e从大到小(必要),最后遍历,修改查询就可以了。

    {POJ}{2155}{Matrix}

    给定一个0-1矩阵,在线对(x1,y1),(x2,y2)之间的元素置反,在线对特定矩阵求和。

    一道二维树状数组,思路还是挺清晰的,由于是0-1矩阵,只需用tre[][]记录一个元素被置反的次数即可,当对 (x1,y1),(x2,y2)区间置反时,需要改动四个地方就是4个角就可以了。为什么呢?如下图,假设A区未需要置反的区域,因为改动A区的左上角 时,由树状数组的性质知:A,B,C,D4个区域都是要被置反的,所以在依次置反BD,CD,D,这样,置反的总过程为ABCD,BD,CD,D,这样我 们就会发现结果对2取模时,只有A区被置反,B,C,D三个区都没有变化。明白原理之后就好做了。

    {POJ}{2481}{Cows}

    给定n个区间,问每个区间所覆盖的区间的个数。

    第三道树状数组,终于有感觉了,要不就傻X了,对区间排序,然后树状数组查询,思路和Stars那道差不多,不过还要处理重合区间的情况,只需排序后O(N)扫描一遍就好了。

    {POJ}{3321}{Apple Tree}

    有n个苹果被树枝连接,这是一棵树!有两种操作C ind 和 Q ind,前者是摘下ind苹果,如果没有,哪么会长出新的一个,后者是查询ind有几个子苹果。

    第二道树状数组,自己想了很久不知道怎么转化,原来是利用树的性质,dfs一遍,记录每个节点的low和high值,那么他的 子结点的low值和high值肯定在[low,high]之间,然后就可以通过tre[high[i]]-tre[low[i]-1]来查询当前节点的子 结点个数了

    {POJ}{2352}{Stars}

    给定一组点,问二维空间中各个点的等级是多少,点的等级定义如下:其左下方点的个数。

  • 相关阅读:
    Java Bean、POJO、 Entity、 VO 、PO、DAO
    javadoc生成出现错误“编码 GBK 的不可映射字符”
    MySQL 查询所有子级函数
    mybatis配置自带缓存和第三方缓存
    通过js调用android原生方法
    window10上登录Oracle时提示ORA-12546:Permission denied
    大表的主键创建优化技术(转一篇有深度的文章)
    Oracle并行执行特性应用初探
    【腾讯大学】服务商工具+服务平台 小结
    【腾讯大学】猫眼:产品核心能力--产品决策力 小结
  • 原文地址:https://www.cnblogs.com/lvpengms/p/3915669.html
Copyright © 2011-2022 走看看