看到各路dalao用平衡树的做法,表示本人不才,并不会。

然而我会优先队列_huaji_,并且发现用堆解题的dalao们并没有基于在线的做法

于是我的showtime到了

评测结果:https://www.luogu.org/record/show?rid=4645103

先讲一下思路:

题干所描述的** i **的实际值并不重要,他只是作为堆的一个位置

当然如果你暴力模拟的话肯定会超时

  • 为此我们考虑维护两个堆,一个是大根堆,一个是小根堆,且满足小根堆中的数比大根堆中的数大

  • 用bool变量flag来表示当前所操作的是大根堆还是小根堆

  • 首先是ADD(x),按flag和x分为四种情况

  • 然后是GET,按flag分为两种情况

  • 具体操作见以下代码:

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<algorithm>
#pragma GCC optimize(3)//STL必带
using namespace std;
#define ll long long
const int maxn=2e5+10;
const int INF=0x7fffffff;
inline void read(int&x){//卡常的输入
    int data=0,w=1;
    char ch=getchar();
    while(ch!='-'&&!isdigit(ch))
        ch=getchar();
    if(ch=='-')
        w=-1,ch=getchar();
    while(isdigit(ch))
        data=10*data+ch-'0',ch=getchar();
    x=data*w;
}
void write(int x){//卡常的输出
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar('0'+x%10);
}
int a[maxn],u[maxn]={0};
priority_queue <int,vector<int>,less<int> > lrh;//大根堆,large root heap
priority_queue <int,vector<int>,greater<int> > srh;//小根堆,small root heap
int main()
{
//    freopen(".in","r",stdin);
//    freopen(".out","w",stdout);
    int m,n;
    read(m);read(n);
    for(int i=1;i<=m;++i)
        read(a[i]);
    int t;
    for(int i=1;i<=n;++i){
        read(t);
        ++u[t];
    }
    /*clog<<"u:"<<endl;
    for(int i=1;i<=m;++i)
        clog<<i<<" "<<u[i]<<endl;
    clog<<"uend"<<endl;*/
    bool flag=1;
    srh.push(INF); //这个细节很重要,INF的值对此题没有影响,但是如果不加对第一个数的操作会RE的
#define x a[i]
#define y u[i]
    for(int i=1;i<=m;++i){
        if(flag)//ADD(x)
            if(x<srh.top()){
                lrh.push(x);
                flag=0;
            }
            else
                srh.push(x);
        else
            if(x<lrh.top()){//这一步是ADD的精华所在,对两个对做了等价变换
                srh.push(lrh.top());//i值前移,因而大根堆要把最大数给小根堆
                lrh.pop();
                lrh.push(x);
            }
            else
                srh.push(x);
        while(y--){//GET
//            clog<<"once in "<<i<<endl;
            if(flag){//这一步是GET的精华所在,对两个对做了等价变换
                write(srh.top());putchar('\n');
                lrh.push(srh.top());//i值后移,因而小根堆要把最小数给大根堆
                srh.pop();
            }
            else{
                write(lrh.top());putchar('\n');
                flag=1;
            }
        }
    }
//    fclose(stdin);
//    fclose(stdout);
    return 0;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 黑匣子_NOI导刊2010提高(06) Splay Tree

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

随机推荐

  1. (转)不要自称是程序员,我十多年的 IT 职场总结

    其他: 我是一名程序员,工作很努力,为什么绩效还总是垫底? 外企,中年失业何去何从? 来公司半年了,也悟出了一些道理. 如果我可以给每个工程教育增加一门课,它不会涉及编译器.门电路或是时间复杂度,而是 ...

  2. 请求和响应:类ActionController::Base ; 类ActionDispatch::Request

    扩展:ActionController::Base < Metal 2个基本主题: Get and Show do and redirect Requests 每个请求,由router决定了co ...

  3. Excel 版本对应

    (1) 1985年:Excel 1.0 (2) 1993年:Excel 5.0——Office 4.2 (3) 1995年:Excel 7.0(Excel 95)——Office 95 (4) 199 ...

  4. eclipse properties 文件查看和编辑插件 Properties Editor

    Properties Edito官网地址:http://propedit.sourceforge.jp/index_en.html Properties Edito安装地址:http://proped ...

  5. java中4种修饰符访问权限的区别

    访问权限 类 本包 子类 其他包 public √ √ √ √ protected √ √ √ x default(缺省) √ √ x x private √ x x x

  6. ES profile 性能优化用——返回各个shard的耗时

    Profile API 都说要致富先修路,要调优当然需要先监控啦,elasticsearch在很多层面都提供了stats方便你来监控调优,但是还不够,其实很多情况下查询速度慢很大一部分原因是糟糕的查询 ...

  7. Ionic构建打包apk出现的问题集合

    当我们写完 ionic 项目准备打包成 apk 时(比如执行 ionic cordova platform add android 或者 ionic cordova build android 等命令 ...

  8. 第n次考试

    题目: 1.堆方块  [题目描述] 给定N个方块,排成一行,将它们编号1到N. 再给出P个操作: M i j表示将i所在的那一堆移到j所在那一堆的顶上. C i表示一个询问,询问i下面有多少个方块. ...

  9. 使用Socket的简单Web服务器

    Socket类在System.Net.Sockets命名空间 常用的操作 Bind:绑定一个本地的终结点 Listen:进入监听状态,并设置等待队列 Accept:等待一个新连接,当连接到达时,返回一 ...

  10. webpack 性能优化 -- 待续

    文章 这篇文章挺不错的, 各方面优化都提到了, 有空研究下 文章 这个文章提出 , 增量打包用 webpack-watch 会让你打包速度飞快,  react不参与打包, 不require, 而是放在 ...