1 条题解
-
1240810cj杨宇诚 (杨宇诚) LV 8 @ 2024-08-05 12:56:39
#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
- 上传者