zoukankan      html  css  js  c++  java
  • luogu P1801 黑匣子_NOI导刊2010提高(06)

    题目描述

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

    命令只有两种:

    ADD(x):把x元素放进BlackBox;

    GET:i加1,然后输出Blackhox中第i小的数。

    记住:第i小的数,就是Black Box里的数的按从小到大的顺序排序后的第i个元素。例如:

    我们来演示一下一个有11个命令的命令串。(如下图所示)

    现在要求找出对于给定的命令串的最好的处理方法。ADD和GET命令分别最多200000个。现在用两个整数数组来表示命令串:

    1.A(1),A(2),…A(M):一串将要被放进Black Box的元素。每个数都是绝对值不超过2000000000的整数,M$200000。例如上面的例子就是A=(3,1,一4,2,8,-1000,2)。

    2.u(1),u(2),…u(N):表示第u(j)个元素被放进了Black Box里后就出现一个GET命令。例如上面的例子中u=(l,2,6,6)。输入数据不用判错。

    输入输出格式

    输入格式:

    第一行,两个整数,M,N。

    第二行,M个整数,表示A(l)

    ……A(M)。

    第三行,N个整数,表示u(l)

    …u(N)。

    输出格式:

    输出Black Box根据命令串所得出的输出串,一个数字一行。

    输入输出样例

    输入样例#1: 复制
    7 4
    3 1 -4 2 8 -1000 2
    1 2 6 6
    
    输出样例#1: 复制
    3
    3
    1
    2
    

    说明

    对于30%的数据,M≤10000;

    对于50%的数据,M≤100000:

    对于100%的数据,M≤200000。

      1 #include<algorithm>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<cstdlib>
      5 #include<cstdio>
      6 #include<cmath>
      7 #define RG register
      8 #define il inline
      9 #define rep(i,a,b) for(register int i=a;i<=b;++i)
     10 #define ll long long
     11 #define db double
     12 using namespace std;
     13 const int N = 200000 + 5;
     14 struct Minh{
     15     int a[N],sz;
     16     Minh(){sz = 0;}
     17     il int top(){
     18     return a[1];
     19     }
     20     il void pop(){
     21     RG int now = 1,nxt;
     22     a[1]=a[sz--];
     23     while((nxt = now<<1)<=sz){
     24         if(nxt<sz&&a[nxt+1]<a[nxt]) nxt++;
     25         if(a[now]<=a[nxt]) break;
     26         swap(a[now],a[nxt]);
     27         now = nxt;
     28     }
     29     }
     30     il bool empty(){
     31     return sz==0;
     32     }
     33     il void push(RG int x){
     34     a[++sz]=x;
     35     RG int now=sz,pa;
     36     while(now>1){
     37         pa = now>>1;
     38         if(a[now]>=a[pa])break;
     39         swap(a[now],a[pa]);
     40         now = pa;
     41     }
     42     }
     43 };
     44 
     45 struct Maxh{
     46     int a[N],sz;
     47     Maxh(){sz = 0;}
     48     il int top(){
     49     return a[1];
     50     }
     51     il void pop(){
     52     RG int now = 1,nxt;
     53     a[1]=a[sz--];
     54     while((nxt = now<<1)<=sz){
     55         if(nxt<sz&&a[nxt+1]>a[nxt]) nxt++;
     56         if(a[now]>=a[nxt]) break;
     57         swap(a[now],a[nxt]);
     58         now = nxt;
     59     }
     60     }
     61     il bool empty(){
     62     return sz==0;
     63     }
     64     il void push(RG int x){
     65     a[++sz]=x;
     66     RG int now=sz,pa;
     67     while(now>1){
     68         pa = now>>1;
     69         if(a[now]<=a[pa])break;
     70         swap(a[now],a[pa]);
     71         now = pa;
     72     }
     73     }
     74 };
     75 
     76 Maxh qma; Minh qmi;
     77 il int gi(){
     78     RG int x=0,f=1; RG char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
     79     if(ch=='-') f=-1,ch=getchar(); while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;
     80 }
     81 
     82 int a[N],m,n;
     83 int main(){// remember register
     84     freopen("heap.in","r",stdin);
     85     freopen("heap.out","w",stdout);
     86     m=gi(),n=gi(); rep(i,1,m) a[i]=gi();
     87     RG int j=1,p,y;
     88     for(RG int i=1;i<=n;i++){
     89     p=gi();
     90     while(j<=m&&j<=p){
     91         if(!qma.empty()){
     92         y=qma.top();
     93         if(y<=a[j])
     94             qmi.push(a[j]);
     95         else{
     96             qma.pop(); qma.push(a[j]);
     97             qmi.push(y);
     98         }
     99         }
    100         else qmi.push(a[j]);
    101         j++;
    102     }
    103     y=qmi.top(); qmi.pop();
    104     printf("%d
    ",y);
    105     qma.push(y);
    106     }
    107     return 0;
    108 }
  • 相关阅读:
    apache、php隐藏http头部版本信息的实现方法
    CentOs 设置静态IP 方法
    PHP如何判断远程图片文件是否存在
    linux删除乱码文件
    Linux基础学习1
    C#——继承
    解决简体输出乱码问题
    简单的Tuple声明和输出
    懒汉式与饿汉式的区别
    Java 反射
  • 原文地址:https://www.cnblogs.com/ypz999/p/7799937.html
Copyright © 2011-2022 走看看