1 条题解

  • 1

    #include <bits/stdc++.h>
    using namespace std;
    const int N=3e4+10;
    priority_queue<int> q;
    priority_queue<int, vector<int> ,greater<int> > q2;
    int a[N],n,m,x;
    int main()
    {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    int k=1;//k表示当前插入了几个数
    for(int i=1;i<=m;i++)
    {
    scanf("%d",&x);
    while(k<=x)
    {
    q2.push(a[k]);//先放到后面的堆中
    if(!q.empty()&&q.top()>q2.top())//将前后的堆顶比较大小选择是否互换,维护整体的单调性
    {
    int t=q.top();
    q.pop();
    q2.push(t);
    t=q2.top();
    q2.pop();
    q.push(t);
    }
    k++;
    }
    printf("%d\n",q2.top());//输出右堆堆顶,即光标处
    int t=q2.top();//把右堆堆顶扔到左堆,即向右移动光标
    q2.pop();
    q.push(t);
    }
    return 0;
    }
    //541881314

  • 1

信息

ID
1014
难度
7
分类
(无)
标签
递交数
15
已通过
7
通过率
47%
被复制
3
上传者