这里提供一个简单实现新思路:

.

约定:

  1. 以下n指代的数的数量,不是题目所指的n
  2. 以下m指代询问的数量,不是题目所指的m

(不好意思,这是本人习惯)

分块+堆

堆一次只能输出堆顶的一个元素,如果我要找第k小的元素, 理论上复杂度是 O(k*n),这样肯定会TLE

那么我们能不能,把这些数排序后分成几段连续的数在几个堆里,没次查找先去找在哪个堆,再去找在堆里的排名

这样做的话,就可以跳过一些数了

那分成几段才比较优?

分少了,堆里查找就会慢

分多了,找堆就会慢

如果你学过分块的话,你就可以反应过来了,分成根号n段理论上是最好的,因为平摊了两个步骤的复杂度

查找的时候通过 O(sqrt n)来找到在哪个堆,再用 O(sqrt n log n)在堆里来找到它的具体数值*

插入值与查找类似,先找到所处的堆,再加入到堆

还有细节问题,请看代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#define int long long
using namespace std;
const int N=3e5+10,M=N;
int A[N],B[N],belong[N];
priority_queue<int>q[M];
int m,n;
inline void add(int x){
int op=lower_bound(B+1,B+1+m,x)-B;
int blo=belong[op];
q[blo].push(-x);
}
int size,all;
inline int ask(int x){
int op;
for(int i=0;i<=m;i++){
if(x>q[i].size())
x-=q[i].size();
else{
op=i;
break;
}
}
vector<int>p;
int ans=0;
while(q[op].size()){
int u=-q[op].top();q[op].pop();
//弹出
p.push_back(u);
x--;
if(x==0){
ans=u;
break;
}
}
for(int i=0;i<p.size();i++)
q[op].push(-p[i]);//把弹出的数再放回去 return ans;
}
signed main(){
cin>>m>>n;
size=pow(m,1.0/3.0);
all=ceil((double)m/size);
for(int j=1;j<=all;j++)
for(int i=(j-1)*size+1;i<=j*size;i++)
belong[i]=j;
//初始化块
for(int i=1;i<=m;i++){
scanf("%lld",&A[i]);
B[i]=A[i];
}
sort(B+1,B+1+m);
//排序方便判断排名,选择堆
int num=1;
for(int i=1,x;i<=n;i++){
scanf("%lld",&x);
for(int j=num;j<=x;j++)add(A[j]);
num=x+1;
printf("%lld\n",ask(i));
}
}

luogu P1801 【黑匣子_NOI导刊2010提高(06)】的更多相关文章

  1. Luogu P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  2. 【luogu P1801 黑匣子_NOI导刊2010提高(06)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1801 替罪羊树吼啊! #include <cstdio> #include <cstrin ...

  3. P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  4. 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  5. 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)

    [题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...

  6. [洛谷P1801]黑匣子_NOI导刊2010提高(06)

    题目大意:两个操作:向一个可重集中加入一个元素:询问第$k$大的数($k$为之前询问的个数加一) 题解:离散化,权值线段树直接查询 卡点:无 C++ Code: #include <cstdio ...

  7. 洛谷 P1801 黑匣子_NOI导刊2010提高(06)

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  8. 洛谷 P1801 黑匣子_NOI导刊2010提高(06) 题解

    昨晚恶补了一下二叉堆的内容 然后就找了几个二叉堆的题来做awa 然后发现用二叉堆做这题复杂度是O(nlogn) 但是有O(n)的解法 (某大佬这么说) 思路大概就是: 利用一个大根堆一个小根堆来维护第 ...

  9. 题解 P1801 【黑匣子_NOI导刊2010提高(06)】

    蒟蒻来发题解了.我仔细看了一下其他题解,各位巨佬用了堆,红黑树,splay,treap之类的强大算法,表示蒟蒻的我只会口胡这些算法,所以我决定用一种极其易理解的算法————fhq treap,作为tr ...

随机推荐

  1. sshd服务以及基于口令的远程登陆

    ssh用为客户端,主要进行服务器端的连接:sshd用为服务器端 几个常用的命令: systemctl              ##服务控制命令   systemctl start sshd   ## ...

  2. 『题解』洛谷P4016 负载平衡问题

    title: categories: tags: - mathjax: true --- Problem Portal Portal1:Luogu Portal2: LibreOJ Descripti ...

  3. Opencv-Python项目(1) | 基于meanshiftT算法的运动目标跟踪技术学习

    目标跟踪(object tracking)就是在连续的视频序列中,建立所要跟踪物体的位置关系,得到物体完整的运动轨迹. 目标跟踪分为单目标跟踪和多目标跟踪.本文如无特别指出,均指单目标跟踪. 通常的做 ...

  4. php编辑器notepad++ 推荐一款非常好看主题和字体

    php编辑器notepad++ 推荐一款非常好看主题和字体1.主题名称:Obsidian 2.字体字号:Courier New 10 3.设置方法:设置---语言格式设置---选择主题,同时勾选“使用 ...

  5. Hadoop4-HDFS分布式文件系统原理

    一.简介 1.分布式文件系统钢结构 分布式文件系统由计算机集群中的多个节点构成,这些节点分为两类: 主节点(MasterNode)或者名称节点(NameNode) 从节点(Slave Node)或者数 ...

  6. fcgi-2.4.1.tar.gz 和 spawn-fcgi-1.6.4.tar.gz 百度云

    链接:https://pan.baidu.com/s/1nEzOkFC0-rfVMDy_BygLWg 提取码:ty0e 美好的东西都是免费滴

  7. [复现论文程序图]High Speed Continuous Variable Source-Independent Quantum Random Number Generation

    这次的任务是复现该文章的图2(C),过程如下. ①翻译了整篇文章,断断续续,花了3-4天时间. ②阅读文章,并且记录下每个符号的意义,记在单独的1个word文档里. ③开始编程,用的matlab201 ...

  8. spark-宽依赖和窄依赖

    一.窄依赖(Narrow Dependency,) 即一个RDD,对它的父RDD,只有简单的一对一的依赖关系.也就是说, RDD的每个partition ,仅仅依赖于父RDD中的一个partition ...

  9. 微擎 manifest.xml

    微擎 manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns= ...

  10. nyoj 209 + poj 2492 A Bug's Life (并查集)

    A Bug's Life 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Background  Professor Hopper is researching th ...