• CSPS_103


      被sdfz踩爆了!

      %%%kai586123

      %%%Gekoo

      %%%sdfz_yrt

      

      T1

        我以为是水题!一直在肝!

        而且为什么每次我的考场暴力都是考后才调出来啊!!

        先记录一下正解的大神做法:

          按顺序考虑每次出牌,每次要出使总胜数不变的最大的牌

          考虑将a和b的牌放在一起排序,那么这个问题变成了:括号匹配

          那么考虑对于一个左括号,每次找一个最靠右的右括号与他匹配(或不匹配),还使得总对数不变

          如果找到的右括号在它右边,那么如果找到的当前位置i的右括号导致对数减少,找到更右的位置i+k一定也导致对数减少

          这点可以直观理解,因为i位置导致对数减少,说明左侧的左括号找不到任何替代的右括号,也说明右侧没有任何“空闲”的括号

          所以出牌的大小对对数的影响有可二分性,问题变成了如何快速维护剩余对数

          Rockstar_B:线段树维护分治

          考虑在值域线段树上维护对数,给每个节点维护2个变量sum[2]和pair表示这个值域区间里“空闲”左括号和右括号的数量和匹配数

          修改后递归回来维护:

          int now=min(sum[lch][0],sum[rch][1]);

          pair[x]=pair[lch]+pair[rch]+now;

          sum[x][0]=sum[lch][0]+sum[rch][0]-now;

          sum[x][1]=sum[lch][1]+sum[rch][1]-now;

          最后对数就是 pair[1]

        然后记录下弱智的暴力做法。

          同样是括号匹配,需要被满足的左括号p两端的答案分别单调

          那么找到的右括号应该满足什么样的性质呢?

          考虑找到的右括号本来就和左括号匹配,那么应该是可以与之匹配的最靠右的那一个

          如何找到,把左括号视为+1,右括号视为-1,那么从头开始跑这个过程,到了p之后的一个位置减为了0

          那么这个0就是最后一个可以被拿走的右括号。原因是,再拿右边的,将导致这个0减为-1,也就是增加了一对失配,对数减少了。

            

          考虑右括号没和左括号匹配,这种右括号就是找不到左括号匹配那种,也就是说跑了一遍+1-1之后,它所在的位置应该为负数(虽然强制赋成0)

          一个比较优的暴力做法就是,先跑一遍+1-1的括号匹配,把所有的失配右括号塞到堆里,并标记不再进堆

          按出牌顺序枚举左括号,首先取出堆顶最优的第二种括号,再暴力找第一种括号,两者取一个max作为此次的手牌

          然后删除这两个括号,重新维护+1-1的前缀和序列。就是从修改的地方开始重新跑。

          再加一个剪枝,如果跑到一个地方发现你求出来的真实值和它原本的值相同,就不用跑了,因为可以想到再跑也不会再有更新了。

      T2

        最大值不好搞,把最小值扔到两边。

      T3

        差分表。

        更细节的我也不会,本题用到了一些性质

        差分表中的差分值具有单调性,即大的差分值一定出现在序列较靠前的位置

        差分表中的k个元素一定作用于序列的前k个元素

        

        于是这些差分值可以用一个堆维护。

        另一个学到的地方是dfs+set建树。

  • 相关阅读:
    动态规划——Best Time to Buy and Sell Stock IV
    动态规划——Split Array Largest Sum
    动态规划——Burst Ballons
    动态规划——Best Time to Buy and Sell Stock III
    动态规划——Edit Distance
    动态规划——Longest Valid Parentheses
    动态规划——Valid Permutations for DI Sequence
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11809849.html
Copyright © 2020-2023  润新知