zoukankan      html  css  js  c++  java
  • 考试总结 模拟$103$

    考试过程

    没想到啊,早应该记住这个毒瘤出题人的名字的

    刚开始状态还是挺好的,T1看了好久,有了一个比较模糊的思路

    打表证伪,只打了暴力

    然后看T2发现暴力很不好打,1h多才发现自己eoo读错题了,只是临位交换

    还是没思路就去看T3,读完题发现样例没模过,考试进行了2h多了,正是及其混乱的时候

    读不懂T3心态更是爆炸,只好出去溜了一圈,可算是有了活下去的勇气

    接着写了T2的hash暴力然后又看T3可算看懂了,紧张地写暴力

    现在要提升的还是要在每一场考试的中间,保持冷静!

    题解

    T2「贪心」「树状数组」

    首先我们会发现,k一定是最大值,并且整个序列的最小值一定在最左端或最右端

    我们考虑将它一步一步地移动到一端,相当与是走过的点都向反方向移动一位,并且贡献不会变

    所以我们只需要找到左右两端最小的那个移动过去就好

    那么处理完这个最小值之后,就又变成了一个子问题,

    所以我们处理的顺序就是每次找到一个最小值,将它移动到左/右端

    注意出现了多个最小值的情况,我们要移动的是当前的贡献最小的那个

    即在所有相同的值中离两端最近的那个,否则的话,可能会出现,一个点与自己等高的多交换了一次

    复杂度$O(n^2)$

    我们再考虑一下对于每次移动,一定是最小值和比自己大的交换,而这些比它高的个数就是原序列中的从这个点到某一端,比它高的个数

    树状数组处理就好了

  • 相关阅读:
    Linux常用命令2
    Linux常用命令1
    Nginx配置Kafka
    SpringBoot整合Druid
    spring boot jpa
    mybatis-plus_2
    copy data to map
    HashMap容量问题
    在SpringBoot主启动类中获取实例化的Bean
    Linux环境中Rsync增量备份文件
  • 原文地址:https://www.cnblogs.com/casun547/p/11808768.html
Copyright © 2011-2022 走看看