又被爆踩。

    正解写挂。

    暴力不会。

    只会改题。

    还要加油。

    T1

      $nlog^2$是显然的

      那么考虑只二分一次,就$nlog$了!

      有什么能通过一次二分$O(1)$得到呢?

      二分a的位置,$O(1)$得到b的位置

      check的特判极其惨烈,%%%$Rock_B$调出来了

      

      另一种简单一点的做法:

      二分查找不好搞,考虑另一个二分——分治

      通过分治,让每次的询问参数减半,也是$O(logn)$的复杂度

      设计一个函数找到a的长度为lena,b的长度为lenb时,排名为rank的元素

      那么把每次询问的rank分成一半,在a,b中找到对应的位置(长度不够则让另一个串多分一点)

      如果$a[k/2]<b[k/2]$,则可知$a[1]~a[k/2]$都不可能成为排名为rank的元素

      因为把ab放一起排序后$a[k/2]$后面的元素太多了..显然一定多于$lena+lenb-rank$

      所以把$a[1]~a[k/2]$直接排除出答案,把rank-=k/2(或者当lena<k/2时的lena),递给下一层解决

    T2

      一个dp分成两部分

      $dp[i]=min(dp[j-1]+value(j,i))$

      单调栈维护所有可能贡献出value的j(单调递增栈)

      对同一个j维护可能的最大$dp[k-1](k<=j)$,随便用什么数据结构维护栈里的最大值即可。

    T3

      暴力我打的是vector启发式归并,后来电脑关了,不知道有多少分。

      正解?

      高度烧脑警告。

      我和miku啃了好久题解才弄明白

      (miku教了我好久我才懂的差不多)

      首先对于一个整型随机变量x有这样一个东西:

      $E(x)=\sum\limits_{i=1}^{inf} P(x>=i)$ 

      E(x)为x取值的期望,P为命题成立的概率。

      证明么..

      $$\begin{array}{rcl}\\E(x)&=&\sum\limits_{i=1}^{inf} i*P(x==i)\\&=&\sum\limits_{i=1}^{inf} i*(P(x>=i)-P(x>=i+1))\\&=&1*P(x>=1)-1*P(x>=2)+2*P(x>=2)-2*P(x>=3)+...\\&=&\sum\limits_{i=1}^{inf} P(x>=i)\end{array}$$

      

      现在有了这样一个东西,先考虑每个询问的答案

      $E_q=\sum\limits_{i=1}^{maxv} P(max_{j=l}^{r} val_j >=i)$

      容易想到$i>maxv$的时候没有贡献。

      那么求每个位置的最小值大于等于x的概率即可

      这个概率就是小于x的数都不出现而大于等于x的数出现一个的概率

      不是很好求,转化一下

      求它的反面,也就是每个点的最小值都小于x,也就是大于等于x的都不出现

      这个就好列式了,而且每个位置出现每个值的概率可以预处理,看起来可做了

      $E_q=\sum\limits_{i=1}^{maxv} 1-\prod 1-P(v_j>=i)$

      $v_j$是第j个位置的最小值

      

      总结一下,答案就是:$ans=\sum\limits_{i=1}^{maxv} \sum\limits_{q=1}^{Q} 1-  \prod 1-P(v_j>=i) (L[q]<=j<=R[q])$

      

      可以想到,枚举i时,只有出现魔法石的i才会有$\prod 1-P()$的值的改变,其他情况下后面那坨柿子完全不变

      所以只需要枚举有石头的i,没有石头的i没有变化可以放在一起统计

      考虑维护后面那坨柿子。

      首先那个1可以直接提出来,那么剩下的就是一个连乘的和

      考虑每个石头,他的加入只会影响“某些询问”的连乘中的“某一项”

      由于区间左右端点对应单调,他影响的区间也一定是连续的

      所以可以用数据结构批量修改区间的连乘,具体做法为把他们的权值乘上一个$\frac{1-P_{now}}{1-P_{last}}$

      推荐使用线段树区间修改。

      

      大体的思路如上,细节比较多.. 

CSPS_104的更多相关文章

随机推荐

  1. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  2. Kotlin编译时注解,简单实现ButterKnife

    ButterKnife在之前的Android开发中还是比较热门的工具,帮助Android开发者减少代码编写,而且看起来更加的舒适,于是简单实现一下ButterKnife,相信把下面的代码都搞懂,看Bu ...

  3. mybatis的环境搭建以及问题

    1.mybatis中3个重要的类或者接口 1)SqlSessionFactoryBuilder类 用它来创建工厂对象,它重载了9次build()方法,我们常用build(inputstream)来创建 ...

  4. SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式

    密码模式 前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式.首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持: 因此我们启动项目,直接使用密码模式即可,访问地 ...

  5. # Ubuntu16.04安装nvidia驱动+CUDA+cuDNN

    Ubuntu16.04安装nvidia驱动+CUDA+cuDNN 准备工作 1.查看GPU是否支持CUDA lspci | grep -i nvidia 2.查看Linux版本 uname -m &a ...

  6. 使用Jmeter并发websocket协议项目

    1.安装Jmeter 网址:http://jmeter.apache.org/下载 2.启动Jmeter \apache-jmeter-5.1.1\bin\jmeter.bat 3.安装‘Plugin ...

  7. ZGC介绍

    zgc是一款可拓展的低时延,为实现以下几个目标而诞生的垃圾回收器: 停顿时间不超过10ms 停顿时间不会导致堆大小增长 堆大小范围可支持几G到几T 再看一下zgc的标签: region-based ( ...

  8. nm 命令能够显示目标文件中重载函数的名字改变(C++)

    #include <stdio.h> #include <iostream> using std::cout; using std::endl; //这里的两个不同的add函数 ...

  9. Spring Security 入门 (二)

    我们在篇(一)中已经谈到了默认的登录页面以及默认的登录账号和密码. 在这一篇中我们将自己定义登录页面及账号密码. 我们先从简单的开始吧:设置自定义的账号和密码(并非从数据库读取),虽然意义不大. 上一 ...

  10. NoticeBoard

    本人蒟蒻,请轻点虐. 本人是一个即将退役的蒟蒻. 有些题目和模拟赛用密码保护起来了,请小伙伴们不要猜了,猜不出来的.想知道大佬们如果想查看可以直接找我问,您们高抬贵眼会让我受宠若惊. 哇终于有人找我要 ...