zoukankan      html  css  js  c++  java
  • 分块的一道题

    题意:

    区间+k,查询=c的个数(c一开始给定)

    1.当k为正数

    2.不保证k为正数

    题解:

    两个的复杂度是不一样的

    1的话显然每个数只会成为1次c

    我们记录区间比c小的最大值就可以了

    每次进入一个区间当且仅当这个区间有+k>c的数

    复杂度$nlogn$

    2的话我们考虑分块

    里面开个数组维护一下从小到大排列

    ***下面的$sqrt{n}$应该是$block$和$n/block$

    查询显然是块内二分$sqrt{n}logn$

    修改刚开始以为也是$sqrt{n}logn$的

    对于整块的打加标记$sqrt{n}$

    对于零散可以不用插入后排序

    我们按照原来排序扫过去,然后判断这个数在不在当前区间

    于是变成合并两个有序表归并排序

    于是改个块大小复杂度$nsqrt{nlogn}$

  • 相关阅读:
    c# 字符串中某个词出现的次数及索引
    c# 冒泡排序
    WCF 高级知识
    Web Api基础知识
    Web Services基础知识
    WCF Demo
    IIS部署WCF常见错误
    IIS部署WCF
    IIS部署WCF错误
    WCF基础知识
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/10142893.html
Copyright © 2011-2022 走看看