zoukankan      html  css  js  c++  java
  • 【JZOJ3854】【NOIP2014八校联考第2场第2试9.28】分组(group)

    MEi

    Bsny所在的精灵社区有n个居民,每个居民有一定的地位和年龄,ri表示第i个人的地位,ai表示第i个人的年龄。
    最近社区里要举行活动,要求几个人分成一个小组,小组中必须要有一个队长,要成为队长有这样的条件:
    1、队长在小组中的地位应该是最高的(可以并列第一);
    2、小组中其他成员的年龄和队长的年龄差距不能超过K。
    有些人想和自己亲密的人组在同一个小组,同时希望所在的小组人越多越好。比如x和y想在同一个小组,同时希望它们所在的小组人越多越好,当然,它们也必须选一个符合上述要求的队长,那么问你,要同时包含x和y的小组,最多可以组多少人?

    LUA

    如果选定一个人做队长,那么可以组队的人是一定的。
    所以我们容易预处理出每个人做队长的队伍人数:
    给所有人按地位从小到大枚举,每枚举一个人便把他的年龄加入一棵权值线段树,然后也容易从权值线段树中得出地位比他低并且年龄与它差距K的人数。


    我们考虑对于一个询问而言,所选的队长必须满足:
    1.地位大于或等于这两个人的地位最大值;
    2.与两个人的年龄差不超过K。
    在上述基础上,选择一个组队人数最多的队长。


    首先满足第一个条件·,就离线把询问的所需地位从大到小排序,
    然后每枚举一个询问,就把所有地位大于这个询问所需地位的人加进另一棵权值线段树。
    然后这个询问的答案也容易从这棵权值线段树中得到,也即在满足第二个条件的区间中查找组队人数最多的队长。

  • 相关阅读:
    看懂Oracle执行计划
    pl/sql编译存储过程卡住的解决方法
    ORA-00604的解决方法
    ORACLE SYNONYM详解
    Oracle 用户权限管理方法
    “ORA-06550: 第 1 行, 第 7 列”解决方法
    oracle 存储过程给另一个用户的权限问题
    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile
    eclipse maven maven-compiler-plugin 报错 完全解决
    如何用git把本地代码上传到github
  • 原文地址:https://www.cnblogs.com/hiweibolu/p/6714807.html
Copyright © 2011-2022 走看看