zoukankan      html  css  js  c++  java
  • 「10.28」Dove 打扑克(链表)·Cicada 与排序(概率)·Cicada 拿衣服(各种数据结构)

    A. Dove 打扑克


     考场思考半天线段树树状数组,没有什么想法

    打完暴力后突然想到此题用链表实现会很快。

    因为只有$n$堆,所以设最多有$x$个不同的堆数,那么$x imes (x-1)/2==n$,

    所以链表中最多有$sqrt{n}$个元素,

    所以可以用一个$set$维护当前的出现元素,每次$upper\_bound$找到合适位置插入链表,

    因为当前元素有序所以可以统计链表后缀来求答案

    知识点:

    不要在T1花太长时间,数据结构题可能只用到一些简单数据结构

    B. Cicada 与排序


     很好的概率题,感谢zkt大神讲解。

    首先处理两个数组$f_{i,j} h_{i,j}$

    分别表示在一次合并中,第j个数放到了大的序列的第i个位置的概率。

    第二个表示此时右区间已经放完的概率,两者都是对于同一元素而言

    然后在处理中我们用到$dp_{i,j,k}$表示归并中的第$i$层原序列第$j$个位置放在同元素序列的排名第k的位置的概率

    然后转移时需要枚举每一层中同元素左边放多少右边放多少,乘积累加。

    C. Cicada 拿衣服


    考场很难想到这样的思路

    首先对于$or-and$来说我们固定一个端点后最多有$2*log(a_{i})$这是针对二进制每一位而言的

    我们用链表维护对于一个端点的值相同的区间的右端点

    每次循环右端点时将链表中的的相同值合并,保证表中只有$log(n)$个元素

    然后可以用$ST$表预处理出这4项操作

    每次从左向右每次跳找到第一个符合的值,再在这段小区间里二分

    时间复杂度$O(n*log(a_{i})*log(a_{i}))$.

  • 相关阅读:
    c++标准库容器【转】
    C++命名空间的解释 【转】
    [转载]定义、公理、定理、推论、命题和引理的区别
    待读论文
    矩阵分解 Matrix Factorization (RegularSVD) 实验总结
    Predicting the Next Location: A Recurrent Model with Spatial and Temporal Contexts AAAI2016
    Discovering Urban Functional Zones Using Latent Activity Trajectories TKDE 2015
    numpy
    python 编程 规范
    深度学习
  • 原文地址:https://www.cnblogs.com/Wwb123/p/11756577.html
Copyright © 2011-2022 走看看