zoukankan      html  css  js  c++  java
  • POI 2018.10.27

    [POI2015]LOG

    维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a。2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作。每次询问独立,即每次询问不会对序列进行修改。

    n<=1e6

    修改数值不好掌握。我们离线读入询问,把所有的s,a离散化下来。

    发现,对于一个Z c s,我们只要判断能不能操作。所以只关心大小关系。

    大于等于s的数可以在s次中都参与贡献,小于s的数只能部分参与贡献。

    设cnt为不小于s的数的出现次数,sum为小于s的数的出现次数。

    可以操作的当且仅当:

    sum>=s*(c-cnt)

    意即,cnt个数每次都贡献之后,每次还剩(c-cnt)个要贡献,有s次。这些都要由小于s的数贡献。

    所以如果sum>=s*(c-cnt)那么必然可以,否则必然不行。

    权值线段树维护即可。

    [POI2015]PUS

    线段树优化建图。

     [POI2015]PUS

    [POI2015]KIN

    题目描述

    共有m部电影,编号为1~m,第i部电影的好看值为w[i]。在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部。你可以选择l,r(1<=l<=r<=n),并观看第l,l+1,…,r天内所有的电影。如果同一部电影你观看多于一次,你会感到无聊,于是无法获得这部电影的好看值。所以你希望最大化观看且仅观看过一次的电影的好看值的总和。

    注意题意:一个电影看的多于一次,贡献就变成0了。

    肯定要nxt

    枚举左端点l。

    线段树维护答案。每个位置p的值的意义是,当左端点是当前的l时,右端点是p的答案是多少。

    从右往左枚举左端点。

    枚举到i,就把i~nxt[i]-1加上w[i],nxt[i]~nxt[nxt[i]]-1减去w[i]即可。

    取后缀[i,n]的mx作为本次的答案即可。

    这样每个点会第一次出现的时候把贡献加上,又一次出现的时候,就把之前的贡献减去了。

    突破口:枚举一个端点,考虑最新加入的点对右端点取哪些点的答案会造成影响。

    一个 思想是:

    一般考虑:枚举右端点是哪个,然后计算答案。

    这个是:直接保存右端点是某个位置的话,答案是多少。只要动态更新答案,那么直接取max即可。

    然后转化为每个点的贡献。

  • 相关阅读:
    Fatal error compiling: invalid target release: 11 -> [Help 1]
    java -jar 设置日志位置
    wordpress 添加 显示磁盘剩余空间百分比的插件
    记录我个人对Telegram的了解
    Ubuntu 18.04 切换使用Python3
    基于 CI 1.7.x 的 项目使用新版本CI的文件缓存类库
    使用sqlyog工具同步两个相同结构的数据库之间的数据
    了解GTIN小记
    华为手机设置桌面图标角标提醒的实现
    Quill编辑器IOS下无法获取焦点的解决方法
  • 原文地址:https://www.cnblogs.com/Miracevin/p/9862081.html
Copyright © 2011-2022 走看看