zoukankan      html  css  js  c++  java
  • 「总结」区间/序列题型总结

    孔乙几显出极高兴的样子,将一个鼠标敲着电脑桌,点头说,“对呀对呀,序列题有四百样出法,你知道么?”

    最近序列题考得有点频繁,于是出来总结一下。

    (不过部分区间题目我已经忘了啊QAQ,只能拣一些稍微简单的写。还是我太蒻了啊QAQ)

    学数数(出处:NOIP模拟测试29(B) B题

    题目大意:n个数组成一个序列,记录n*(n+1)/2个序列中的最大值构成一个新的序列,在这个序列中进行三种操作:1.查询比k大的值的个数 2.查询比k小的值的个数 3.查询等于k的个数

    正解:单调栈扫,统计每一个数作为区间最大值的区间数,然后开桶维护前缀和查询。

    english(出处:NOIP模拟测试31 C题

    题目大意:对于整体区间计算两个答案:

    1.$ans_1=sumlimits_{l=1}^{n}sumlimits_{r=l}^{n}(a_l xor a_r)*max(a_i|lleqslant i leqslant r)$
    2.$ans_2=sumlimits_{l=1}^{n}sumlimits_{r=1}^{n}[(a_1 xor a_r) > max(a_i|1leqslant i leqslant r)]*max(a_i|lleqslant i leqslant r)$

    正解:单调栈预处理出对于每一个$a_i$左侧第一个大于它的数字的位置$l_i$和右侧第一个大于它的数字的位置$r_i$。

    对于$ans_1$,维护每一位二进制下1的个数的前缀和,对于每一个i,查询左侧0的个数和右侧1的个数相乘再左移相应的位数,然后查询左侧1的个数和右侧0的个数相乘再左移相应的位数,相加累加答案。

    对于$ans_2$,解法一(我没打):维护一个可持久化01trie,记录好过每一个点的数字个数,对于每个点所控制的区间进行查询。解法二(向lockey大神学习):莫队优化01trie的建立和删除过程。

    计划(出处:NOIP模拟测试35 B题

    斯诺(出处:NOIP模拟测试38 B题

  • 相关阅读:
    GridView多行多列合并单元格(指定列合并)
    项目管理知识体系指南PMBOK指南
    作业调度框架 Quartz.NET 2.0 beta 发布
    外语学习有助于大脑发育
    抢书之JS版
    mac 安装python和Django开发环境
    戏谈一道面试题
    —安装时填写注册表
    深入浅出SQL Server Replication第一篇:走近Replication(上)
    IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11479719.html
Copyright © 2011-2022 走看看